我有一个通用的绘图类,使用matplotlib生成(png)图,可能有多个y轴,但始终只有一个(共享的)x轴显示日期。
这是处理x轴标签格式的方法:
这是处理x轴标签格式的方法:
def format_xaxis(self, axis, primary):
steps = (1,2,3,4,6,12)
step = steps[min(len(self.dates) // 1000, 5)]
axis.set_axisbelow(True)
axis.xaxis.grid(b=True, which='minor', color='0.90', linewidth=0.5)
axis.xaxis.set_minor_locator(MonthLocator(bymonth=range(1,13,step)))
axis.xaxis.set_major_locator(YearLocator())
if primary:
axis.xaxis.set_major_formatter(DateFormatter(fmt='%b %y'))
axis.xaxis.set_minor_formatter(DateFormatter(fmt='%b'))
else:
plt.setp(axis.get_xticklabels(), visible=False)
使用以下输入:
- primary是一个布尔值,表示这是否是主轴
- axis是一个matplotlib轴实例
我想要的(并且期望从上述方法中得到的结果)是只有主轴有标签,并且主标签是月份-年份,次标签是仅月份。
但实际发生的是,只有主标签显示在主轴上,次标签根本没有显示。
如果我将最后6行更改为:
axis.xaxis.set_major_locator(YearLocator())
axis.xaxis.set_major_formatter(DateFormatter(fmt='%b %y'))
axis.xaxis.set_minor_formatter(DateFormatter(fmt='%b'))
if not primary:
plt.setp(axis.get_xticklabels(), visible=False)
然后在所有轴上显示次要标签。
我该如何只在主要x轴上显示次要x轴刻度标签?
编辑:
使用KevinG第二个代码块中的建议可行:
axis.xaxis.set_major_locator(YearLocator())
axis.xaxis.set_major_formatter(DateFormatter(fmt='%b %y'))
axis.xaxis.set_minor_formatter(DateFormatter(fmt='%b'))
if not primary:
plt.setp(axis.get_xticklabels(minor=False), visible=False)
plt.setp(axis.get_xticklabels(minor=True), visible=False)
visible=False
行不会被执行(这是正确的)。 - John Peters