1

編集開始

最初の投稿の後、私は自分のコードをいじり続けました。私のサブプロットでは、同じデータ セットの 4 つのプロットを作成しており、各サブプロットは異なる時間範囲を持っています。ただし、各サブプロットに同じ時間範囲を指定すると、マイナー ティックは消えません。これが、Deditos が私の問題を再現できなかった理由かもしれません。

そうは言っても、各サブプロットを手動で作成すると (それぞれが異なる x 軸の範囲を持つ)、マイナー ティックの位置を設定し、次に各サブプロットの xrange を設定します。ax3 を設定するまでマイナー ティックが消えません (つまり、最後のサブプロット) 範囲。

問題は、x 軸の範囲が異なることにあるようです。奇妙なことに、各軸のプロパティを個別に設定することで、すべてが結び付けられるわけではないと思います。

編集を終了

すべてが時系列である 4 つのサブプロットを持つ 1 つの図を作成しています。私は 4 時間ごとに xaxis のメジャー ティックを配置し、マイナー ティックを 1 時間ごとに配置したいと考えています。最初のサブプロット (ax1 と呼ばれる) にマイナー ティックを設定すると、マイナー ティックが表示されます。ただし、ax2 にマイナー ティックを設定すると、ax2 に表示されますが、ax1 のマイナー ティックは消えます。これを ax3 と ax4 で繰り返します。したがって、最終的に、4 番目のサブプロットには小さな xaxis の目盛りしかありません。yaxis にも同じ問題がありましたが、各軸に yaxis.set_minor_locator(MultipleLocator(5)) を使用してこの問題を解決しました (以下を参照)。ただし、MultipleLocator は時系列データに対しては機能しないようです。マイナー xaxis ティックを維持する方法を知っている人はいますか?

from pylab import *
from matplotlib.ticker import AutoMinorLocator, MultipleLocator
minor = AutoMinorLocator()

# Start plotting
fig = figure( figsize=(22,11) )
ax1 = fig.add_subplot(221) # 8-August 2011
ax2 = fig.add_subplot(222) # 9-August 2011
ax3 = fig.add_subplot(223) # 23-August 2011
ax4 = fig.add_subplot(224) # 24-August 2011

# This is repeated for ax2, ax3, and ax4, yielding a 2x2 grid of subplots. 

# Plot 8-August 2011 data
ax1.plot(tpan.index,tpan.no2,'.-',markersize=10)
ax1.errorbar(tacam.index,tacam.no2,yerr=0.15,fmt='r.',markersize=12)

# Format plots
suptitle('Pandora/ACAM NO$_2$ Comparison', fontsize=22)

# Define xtick locations/string labels
xtickloc = [dt.datetime.combine(dates[0],dt.time())+dt.timedelta(hours=h) for h in range(0,25,4)]
xticklab = [dt.datetime.strftime(h,'%H:%M') for h in xtickloc]

ax1.set_xlabel('Hour of Day (UTC, EST+5)',fontsize=14)
ax1.set_ylabel('NO$_2$ Column Density (molec*cm$^{-2}$ E16)',fontsize=14)
ax1.xaxis.set_ticks(xtickloc)
ax1.yaxis.set_ticks(linspace(0,1.5,7))
ax1.xaxis.set_minor_locator(minor)
ax1.yaxis.set_minor_locator(MultipleLocator(5))
ax1.set_xticklabels(xticklab,fontsize=12,fontweight='bold')
ax1.set_yticklabels(linspace(0,1.5,7),fontsize=12,fontweight='bold')
ax1.axis( (dates[0],dates[0]+dt.timedelta(days=1),-0.05,1.5),fontsize=6,fontweight='bold')
ax1.tick_params(which='both',width=2,top='on')
ax1.tick_params(which='major',length=7)
ax1.tick_params(which='minor',length=4)
ax1.grid(linestyle='-',which='major',linewidth=1)
ax1.set_title('08-August 2011',fontsize=16)
ax1.legend( ('Pandora VCD','ACAM dSCD'),loc=2,ncol=2)
4

1 に答える 1

3

私は同じ問題に直面していました。あなたがする必要があるのは次のことだと思います:

ax1.xaxis.set_minor_locator(AutoMinorLocator())

それ以外の

ax1.xaxis.set_minor_locator(minor)

各軸に同じオブジェクトを渡しています。サブプロットの範囲に基づいて ax4 でプロットすると、このオブジェクトの内容が変更されます。それが役に立てば幸い。

于 2014-01-29T01:52:21.100 に答える