【问题标题】:Matplotlib move tick labels inside plot areaMatplotlib 在绘图区域内移动刻度标签
【发布时间】:2021-09-05 09:04:34
【问题描述】:

是否可以在绘图区域内放置刻度标签?我已经试过了:

ax.tick_params(axis="y",pad=-.5, left="off",labelleft="on")

ax.tick_params(axis="y",direction="in", left="off",labelleft="on")

前者只是将轴向内移动,后者只移动刻度而不是刻度标签。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    更新

    我完全忘记了 tick_params 中的 pad 参数。 @ImportanceOfBeingErnest’s answer 利用了这一点,更适合提出的问题。

    不过,我将把我的答案留在这里作为一个例子,说明如果无法通过thick_params 等通用方法实现相同的目标。


    我不知道实现这一点的官方方法。但是你可以硬编码它。

    如果你只想在里面有刻度,你只需要运行:

    ax.tick_params(direction="in")
    

    现在,要在绘图区域内移动标签,您需要为刻度添加填充,如下所示:

    TICK_PADDING = -10
    
    xticks = [*ax.xaxis.get_major_ticks(), *ax.xaxis.get_minor_ticks()]
    yticks = [*ax.yaxis.get_major_ticks(), *ax.yaxis.get_minor_ticks()]
    
    for tick in (*xticks, *yticks):
            tick.set_pad(TICK_PADDING)
    

    您可能必须为 x 和 y 刻度使用不同的填充。在这种情况下,您应该:

    X_TICK_PADDING = -10
    Y_TICK_PADDING = -20
    
    xticks = [*ax.xaxis.get_major_ticks(), *ax.xaxis.get_minor_ticks()]
    yticks = [*ax.yaxis.get_major_ticks(), *ax.yaxis.get_minor_ticks()]
    
    for tick in xticks:
        tick.set_pad(X_TICK_PADDING)
    
    for tick in yticks:
        tick.set_pad(Y_TICK_PADDING)
    

    它不漂亮,但它有效。 如果这是你想要的,请告诉我。

    【讨论】:

    • 这与其他答案完全相同,只是代码行更多。你能评论一下为什么这比只使用tick_params 更可取吗?
    • 我错过了tick_params 中的pad 参数。我认为您回答中的方法比我的要好。现在我想知道为什么你的投票被否决而我的投票被赞成......?
    • 我想我的答案被否决了,因为有人想对我的任何答案投反对票;大约在同一时间,我收到了另外两个关于其他问题的反对票,这也很好。所以没什么好担心的。
    • 但是这些方法本质上不是通用的。这些填充可以应用于任何地块吗?为什么填充必须最初设置为 -10 或 -20.. 这些不能从轴参考(例如 x=0)计算出来,然后适当地放置标签值?
    • @tpvasconcelos 取决于用例,这可能是首选,因为它更易于调整。我使用了这个,因为我的标签由不同长度的文本组成,所以我可以单独为每个刻度设置填充,这是其他解决方案无法实现的。感谢您的回答!
    【解决方案2】:

    我猜你完全在正确的轨道上。问题只是为填充找到好的参数,以便在轴内有刻度标签。填充以点为单位,因此使用比 0.5 大得多的数字是有意义的。由于文本的对齐方式,x 轴和 y 轴的填充也不同。

    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    ax.tick_params(axis="y",direction="in", pad=-22)
    ax.tick_params(axis="x",direction="in", pad=-15)
    
    plt.show()
    

    【讨论】:

    • 有没有办法让绘图考虑刻度标签的大小。例如,随着我们增加它们的大小,矩形变得更小,就像标准化它一样。
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2015-04-21
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多