我有一个通用绘图类,它使用matplotlib生成(png)可能有多个y轴的图,但总是显示日期的单个(共享)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)
输入:
我想要的(并且期望来自上述方法)是唯一的主轴有标签,主要标签是月 - 月和次要标签月。
所发生的情况是主轴上只显示主要标签,根本不显示次要标签。
如果我将最后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)
答案 0 :(得分:2)
我注意到很多tick标签都有minor=False
作为默认参数。如果现在没有多轴绘图方便,我只能建议你看看那里。我想像
if primary:
axis.xaxis.set_major_formatter(DateFormatter(fmt='%b %y'))
axis.xaxis.set_minor_formatter(DateFormatter(fmt='%b'))
plt.setp(axis.get_xticklabels(minor=True), visible=True)
else:
plt.setp(axis.get_xticklabels(), visible=False)
应该有一些效果。