【问题标题】:matplotlib: showing minor tick labels on primary x axis onlymatplotlib:仅在主 x 轴上显示次要刻度标签
【发布时间】:2013-01-14 02:41:25
【问题描述】:

我有一个通用绘图类,它使用 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)

有输入:

  • 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)

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

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

    应该会有一些效果。

    【讨论】:

    • 谢谢凯文。您的代码无法按原样工作,但您的建议还是通过将其应用于我的替代代码(参见上面的编辑)
    • 很高兴我能帮上忙。但是对于该解决方案的逻辑,有些事情让我感到厌烦......似乎它打开了所有 xaxis 的次要 xaxis 标签,但主要的......如果你的所有 xaxis 都是相同的并且重叠(这必须是你的情况!)但如果你只有一个 xaxis 并且它被标记为主要,或者每个 xaxis 有不同的位置,则会中断。
    • 你是对的,我所有的 x 轴总是相同的。我没有测试过它,但如果只有主轴,它也应该工作 - 在这种情况下,visible=False 行不会被执行(这是正确的)。
    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 2020-01-15
    • 1970-01-01
    • 2022-01-01
    • 2012-03-14
    • 2015-09-02
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多