4

我有一个通用绘图类,它使用 matplotlib 生成可能有多个 y 轴的(png)图,但总是一个显示日期的(共享)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 是一个布尔值,指示这是否是主轴
  • 轴是一个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)
4

1 回答 1

3

我注意到很多刻度标签的东西都有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)

应该有一些效果。

于 2013-01-14T03:05:34.263 回答