2016-04-05 16 views
0

グリッドに複数のデータセットをプロットしています。時系列は1年の期間にわたっているので、私は1年のダニマーカーを持っていますが、目盛りのラベルはすぐに重なっています。これを回避するために、私はxticklablesを回転しようとしました。ただし、これは期待どおりに機能していません。回転後にxticklabelsが消える

from __future__ import division, print_function 

import pandas as pd, numpy as np 
from pylab import * 

index = pd.date_range('20140901','20150901',freq='1H') 
data = np.sin(np.pi*np.arange(index.shape[0])/180) 
df = pd.DataFrame(index=index,data=data,columns=list("A")) 

fig = figure(figsize=(3.25,4.0)) 
gs = GridSpec(5,2) 
gs.update(left=0.08, right=0.925, top=0.95, bottom=0.05, hspace=0.0, wspace=0.0) 

ax0 = subplot(gs[0]) 
ax1 = subplot(gs[1]) 
ax2 = subplot(gs[2]) 
ax3 = subplot(gs[3]) 
ax4 = subplot(gs[4]) 
ax5 = subplot(gs[5]) 
ax6 = subplot(gs[6]) 
ax7 = subplot(gs[7]) 

for axis in xrange(8): 
    ax = eval('ax'+str(axis)) 

    ax.plot(df.index,df.A,'k') 

    # format y-axes 
    if axis in np.arange(1,8,2): 
     ax.set_yticks(np.arange(-1.5,1.5,0.50),minor=False) 
     ax.set_yticks(np.arange(-1.5,1.5,0.25),minor=True) 
     ax.set_yticklabels([]) 

    elif axis in np.arange(2,8,2): 
     ax.set_yticks(np.arange(-1.5,1.5,0.50),minor=False) 
     ax.set_yticks(np.arange(-1.5,1.5,0.25),minor=True) 

    elif axis==0: 
     ax.set_yticks(np.arange(-1.5,1.6,0.50),minor=False) 
     ax.set_yticks(np.arange(-1.5,1.5,0.25),minor=True) 

    ax.set_ylim([-1.5,1.5]) 

    # format x-axes 
    if axis in np.arange(0,6): 
     ax.set_xticklabels([]) 
     ax.xaxis.set_minor_locator(dates.MonthLocator(interval=1)) 
     ax.xaxis.set_major_locator(dates.MonthLocator(interval=3)) 

    elif axis in [6,7]: 
     ax.xaxis.set_minor_locator(dates.MonthLocator(interval=1)) 
     ax.xaxis.set_major_locator(dates.MonthLocator(interval=3)) 
     ax.xaxis.set_major_formatter(dates.DateFormatter('%b-%Y')) 

    ax.set_xlim([dt.datetime(2014,9,1),dt.datetime(2015,9,1)]) 

    ax.tick_params(axis='both',which='major',direction='in',length=4,width=1,labelsize=8) 
    ax.tick_params(axis='both',which='minor',direction='in',length=2,width=1)  


    # insert text boxes 
    ax.annotate('A', 
       xycoords='axes fraction', 
       xy=(0.05,0.75), 
       horizontalalignment='left', 
       verticalalignment='bottom', 
       fontsize=8) 

ax6.set_xticklabels(ax6.get_xticklabels(),rotation=45) 
ax7.set_xticklabels(ax7.get_xticklabels(),rotation=45) 

スクリプトをそのまま実行すると、最下位のx軸にティックラベルが表示されません。しかし、私が最後の2行をコメントアウトする場合は、スクリプトを実行し、次に回転が期待どおりに行われた最後の2行を手動で入力します。私は目盛りラベルを回転させるいくつかの方法を見てきましたが、どれもうまくいきませんでした(つまり、それらはすべて同じ "消えている"問題を持っています)。誰がなぜこれが起こっているのか、それを修正する方法を知っていますか?

のPython 2.7、matplotlibの1.5.1、パンダ0.18.0

enter image description hereenter image description here

+0

プロットを表示します。 – Hun

+0

完了。最初の数字は、最後の2行をコメントなしにスクリプトを実行することで生成され、2行目は最後の2行をコメントし、スクリプトを実行して、最後の2行を手動で入力することによって生成されました。投稿されたスクリプトを実行して、これらの数字を再作成することができます。 – tnknepp

+0

ところで、私は貧弱な画像の解像度についてお詫びしますが、目に見える必要があるのは、目盛りのラベルが最初の画像に表示されていないことです。 – tnknepp

答えて

1

このようなプログラムが動作します変更。

# format x-axes 
if axis in np.arange(0,6): 
    ax.set_xticklabels([]) 
    ax.xaxis.set_minor_locator(dates.MonthLocator(interval=1)) 
    ax.xaxis.set_major_locator(dates.MonthLocator(interval=3)) 

elif axis in [6,7]: 
    ax.set_xticklabels(index.strftime('%b-%Y'),rotation=45)  # Add this line 
    ax.xaxis.set_minor_locator(dates.MonthLocator(interval=1)) 
    ax.xaxis.set_major_locator(dates.MonthLocator(interval=3)) 
    # ax.xaxis.set_major_formatter(dates.DateFormatter('%b-%Y')) # This not needed 
+0

美しく動作します。私の元のコードがラベルを消した原因を知っていますか?おそらくピラブのクォークになります... – tnknepp

+0

ところで、ラベル回転が質問の一部であったので、ax.set_xticklabelsにrotation = 45パラメータを含めるように答えを編集しました。 – tnknepp

関連する問題