1

开始编辑

在最初的帖子之后,我继续使用我的代码。在我的子图中,我制作了相同数据集的四个图,每个子图都有不同的时间范围。但是,如果我给每个子图相同的时间范围,那么次要刻度不会消失。这可能是 Deditos 无法重现我的问题的原因。

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

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

结束编辑

我正在创建一个具有四个子图的图形,它们都是时间序列。我每四个小时间隔一次 xaxis 主要滴答声,并且希望每小时都有次要滴答声。当我为第一个子图(称为 ax1)设置次要刻度时,次要刻度会出现,因为它们应该。但是,当我在 ax2 中设置次要刻度时,它们会出现在 ax2 中,但在 ax1 中的次要刻度消失了。这对 ax3 和 ax4 重复。所以,最后我在第四个子图中只有次要的 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 回答