220

matplotlib で日付の目盛りを回転させようとして問題が発生しています。小さなサンプル プログラムを以下に示します。最後に目盛りを回転させようとすると、目盛りが回転しません。コメント「クラッシュ」の下に示されているように目盛りを回転させようとすると、matplot lib がクラッシュします。

これは、x 値が日付の場合にのみ発生します。への呼び出しでdates変数を変数に置き換えると、呼び出しは 内で問題なく機能します。tavail_plotxticks(rotation=70)avail_plot

何か案は?

import numpy as np
import matplotlib.pyplot as plt
import datetime as dt

def avail_plot(ax, x, y, label, lcolor):
    ax.plot(x,y,'b')
    ax.set_ylabel(label, rotation='horizontal', color=lcolor)
    ax.get_yaxis().set_ticks([])

    #crashes
    #plt.xticks(rotation=70)

    ax2 = ax.twinx()
    ax2.plot(x, [1 for a in y], 'b')
    ax2.get_yaxis().set_ticks([])
    ax2.set_ylabel('testing')

f, axs = plt.subplots(2, sharex=True, sharey=True)
t = np.arange(0.01, 5, 1)
s1 = np.exp(t)
start = dt.datetime.now()
dates=[]
for val in t:
    next_val = start + dt.timedelta(0,val)
    dates.append(next_val)
    start = next_val

avail_plot(axs[0], dates, s1, 'testing', 'green')
avail_plot(axs[1], dates, s1, 'testing2', 'red')
plt.subplots_adjust(hspace=0, bottom=0.3)
plt.yticks([0.5,],("",""))
#doesn't crash, but does not rotate the xticks
#plt.xticks(rotation=70)
plt.show()
4

6 に答える 6

288

非オブジェクト指向のアプローチを好む場合は、2 つの呼び出しの直前plt.xticks(rotation=70)に移動します。avail_plot

plt.xticks(rotation=70)
avail_plot(axs[0], dates, s1, 'testing', 'green')
avail_plot(axs[1], dates, s1, 'testing2', 'red')

これにより、ラベルを設定する前に回転プロパティが設定されます。ここには 2 つの軸がplt.xticksあるため、2 つのプロットを作成すると混乱します。plt.xtickswhenが何もしないplt.gca()時点で、変更したい軸が得られないplt.xticksため、現在の軸に作用する は機能しません。

を使用しないオブジェクト指向のアプローチではplt.xticks、使用できます

plt.setp( axs[1].xaxis.get_majorticklabels(), rotation=70 )

2回のavail_plot電話の後。これにより、具体的に正しい軸で回転が設定されます。

于 2012-06-29T21:40:03.377 に答える