2017-10-12 7 views
0

次のコードでx-tickラベルをどのように回転できますか?
fig.autofmt_xdate()を使用したいのですが、x-tickラベルは日付ですが、どのように実装すればよいのかわかりません。それとは別に、私がこれまでに見つけたローテーションコマンドには、コードは「無害」であるようです。
コードはこの一般のexampleとほぼ同じです。y軸が3つのサブプロット環境での日付の目盛ラベルの回転

import matplotlib 
from mpl_toolkits.axes_grid1 import host_subplot 
import mpl_toolkits.axisartist as AA 
import matplotlib.pyplot as plt 
import numpy as np 
import locale 
locale.setlocale(locale.LC_ALL, 'German') 

CSB = [9205.0, 8845.0, 19740.0, 410.0, 11560.0, 11632.0, 14368.0, 
     11556.0, 9846.0, 14544.0] 
DOC = [np.nan, 1853.0, 4172.0, 259.0, np.nan, np.nan, np.nan, np.nan, 
     np.nan, np.nan] 
NH3N = [3593.5, 3318.8, 5208.0, 306.4, 2708.2, 2682.1, 2812.3, 3033.1, 
     3098.4, 3815.9] 
x = np.linspace(1, 10, 10) 
Daten = ['09.05.2017', '16.05.2017', '23.05.2017', '06.06.2017', '28.08.2017', 
    '31.08.2017', '04.09.2017', '07.09.2017', '14.09.2017', '18.09.2017'] 

font = {'family' : 'Arial', 
     'size' : 12} 
matplotlib.rc('font', **font) 

host = host_subplot(111, axes_class=AA.Axes) 
plt.subplots_adjust(right=0.75) 

par1 = host.twinx() 
par2 = host.twinx() 

host.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, 
      loc: "{0:n}".format(float(x)))) 
par1.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, 
      loc: "{0:n}".format(float(x)))) 
par2.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, 
      loc: "{0:n}".format(float(x)))) 

offset = 85 
new_fixed_axis = par2.get_grid_helper().new_fixed_axis 
par2.axis["right"] = new_fixed_axis(loc="right", 
            axes=par2, 
            offset=(offset, 0)) 

par2.axis["right"].toggle(all=True) 

host.set_xlim(0, 11) 
host.set_ylim(0, 10000) 

host.set_xlabel("Datum Probenahme") 
host.set_ylabel(r'NH$_3$-N-Konzentration $[\frac{mg}{L}]$') 
par1.set_ylabel(r'CSB-Konzentration $[\frac{mg}{L}]$') 
par2.set_ylabel(r'DOC-Konzentration $[\frac{mg}{L}]$') 

host.set_xticks(x) 
host.set_xticklabels(Daten) 


p1, = host.plot(x, NH3N, '+k', label='NH$_3$-N-Konzentration') 
p2, = par1.plot(x, CSB, '.k', label=r'CSB-Konzentration') 
p3, = par2.plot(x, DOC, '^k', label=r'DOC-Konzentration') 

par1.set_ylim(0, 25000) 
par2.set_ylim(0, 5000) 

host.legend(loc=9, ncol = 3, bbox_to_anchor=(0.75, -0.2)) 

plt.draw() 
plt.show() 

図はthisのようになります。

答えて

0

私はこのHostAxesのデモの大ファンではありません。 axes_gridツールキットはさまざまなバグの原因となっていますが、理解するのは非常に簡単ではありません。

通常、通常のサブプロットを使用することをお勧めします。 this answer by @smoneckに正式な例の素敵な複製があります。

したがって、通常のサブプロットと軸を使用すると、fig.autofmt_xdate()を使用するだけで簡単に到達することができます。

import matplotlib.pyplot as plt 
import numpy as np 

CSB = [9205.0, 8845.0, 19740.0, 410.0, 11560.0, 11632.0, 14368.0, 
     11556.0, 9846.0, 14544.0] 
DOC = [np.nan, 1853.0, 4172.0, 259.0, np.nan, np.nan, np.nan, np.nan, 
     np.nan, np.nan] 
NH3N = [3593.5, 3318.8, 5208.0, 306.4, 2708.2, 2682.1, 2812.3, 3033.1, 
     3098.4, 3815.9] 
x = np.linspace(1, 10, 10) 
Daten = ['09.05.2017', '16.05.2017', '23.05.2017', '06.06.2017', '28.08.2017', 
    '31.08.2017', '04.09.2017', '07.09.2017', '14.09.2017', '18.09.2017'] 

font = {'family' : 'Arial', 
     'size' : 12} 
plt.rc('font', **font) 

fig = plt.figure() 
host = fig.add_subplot(111) 

par1 = host.twinx() 
par2 = host.twinx() 

host.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, 
      loc: "{0:n}".format(float(x)))) 
par1.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, 
      loc: "{0:n}".format(float(x)))) 
par2.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, 
      loc: "{0:n}".format(float(x)))) 

offset = 85 
par2.spines['right'].set_position(('outward', offset)) 

host.set_xlim(0, 11) 
host.set_ylim(0, 10000) 

host.set_xlabel("Datum Probenahme") 
host.set_ylabel(r'NH$_3$-N-Konzentration $[\frac{mg}{L}]$') 
par1.set_ylabel(r'CSB-Konzentration $[\frac{mg}{L}]$') 
par2.set_ylabel(r'DOC-Konzentration $[\frac{mg}{L}]$') 

host.set_xticks(x) 
host.set_xticklabels(Daten) 


p1, = host.plot(x, NH3N, '+k', label='NH$_3$-N-Konzentration') 
p2, = par1.plot(x, CSB, '.k', label=r'CSB-Konzentration') 
p3, = par2.plot(x, DOC, '^k', label=r'DOC-Konzentration') 

par1.set_ylim(0, 25000) 
par2.set_ylim(0, 5000) 

#host.legend(loc=9, ncol = 3, bbox_to_anchor=(0.75, -0.2)) 

fig.autofmt_xdate() 
plt.tight_layout() 
plt.show() 

enter image description here

関連する問題