为什么次要滴答在pylab子图上消失

时间:2013-08-12 20:12:54

标签: python-2.7 matplotlib

开始修改

在最初的帖子后,我继续玩我的代码。在我的子图中,我正在制作相同数据集的四个图,每个子图具有不同的时间范围。但是,如果我给每个子图提供相同的时间范围,那么次要标记不会消失。这可能就是为什么Deditos无法重现我的问题。

话虽如此,如果我手动创建每个子图(每个子图具有不同的x轴范围),设置次要刻度位置,那么设置每个子图的xrange我看不到次要刻度消失直到我设置ax3(即最后一个子图)范围。

似乎问题在于具有不同的x轴范围。奇怪的是,我认为通过单独设置每个轴的属性,它们不会全部捆绑在一起。

结束修改

我正在创建一个有四个子图的图,所有子图都是时间序列。我每四个小时就有一个xaxis主刻度线,并且每小时需要一次小刻度。当我为第一个子图(称为ax1)设置次要刻度时,会出现次要刻度,正如它们应该的那样。然而,当我在ax2中设置次要刻度时,它们显示在ax2中,但是ax1中的次刻度消失。这对于ax3和ax4重复。所以,最后我在第四个子图中只有很小的x轴。我对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)

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。我想你需要做的是:

ax1.xaxis.set_minor_locator(AutoMinorLocator())

而不是

ax1.xaxis.set_minor_locator(minor)

您将同一个对象传递给每个轴。根据该子图上的范围绘制ax4时,将修改此对象的内容。希望它有所帮助。