【问题标题】:Matplotlib: Hiding specific y-tick labels not working when ticks on the right side of plotMatplotlib:在绘图右侧打勾时隐藏特定的 y 刻度标签不起作用
【发布时间】:2014-07-13 00:37:16
【问题描述】:

我正在创建一个包含 2 列和多行的子图。我正在使用以下代码将我的刻度标签和轴标签移动到右侧列的右侧(但仍然在两侧保留刻度线):

fig, ax = plt.subplots(4, 2, sharex=False, sharey=False)
fig.subplots_adjust(wspace=0, hspace=0)
for a in ax[:,1]:
  a.yaxis.tick_right()
  a.yaxis.set_ticks_position('both')
  a.yaxis.set_label_position('right')

然后,因为子图靠得很近(这是我想要的,我不希望图之间有任何填充),所以顶部和底部 y-tick 标签在图之间重叠。我已尝试使用here 描述的方法解决此问题(仅选择查看间隔内的那些刻度 - 检查链接以获取更多信息):

import matplotlib.transforms as mtransforms 
def get_major_ticks_within_view_interval(axis):
    interval = axis.get_view_interval()
    ticks_in_view_interval = []
    for tick, loc in zip(axis.get_major_ticks(), axis.get_major_locator()()):
        if mtransforms.interval_contains(interval, loc):
            ticks_in_view_interval.append(tick)
    return ticks_in_view_interval 

for i,a in enumerate(ax.ravel()):
    nplots = len(ax.ravel())
    yticks = get_major_ticks_within_view_interval(a.yaxis)
    if i != 0 and i != 1:
        yticks[-1].label.set_visible(False)
    if i != nplots-2 and i != nplots-1:
        yticks[0].label.set_visible(False)

这对于左列似乎工作正常,但在右列中重叠的刻度仍然可见。有谁知道为什么会发生这种情况,以及如何解决?我就是想不通。

【问题讨论】:

  • 调用 a.yaxis.set_label_position('right') 隐式地将轴重置为默认值。如果您调用您的函数(缩进混乱)之后执行顶部块,那么您的修改将被覆盖。
  • @tillsten:我认为 axes_grid 工具包没有我想要的功能?
  • @tcaswell:我感觉可能会发生类似的事情,所以设置刻度标签可见性是我在保存绘图之前所做的最后一件事,并且说问题仍然存在。 (另外,请您指出压痕的哪一部分搞砸了?我只是没看到...)谢谢!
  • if 语句缩进太多。

标签: python matplotlib plot


【解决方案1】:

我终于找到了解决方案,所以我想我也会把它放在这里,以防有人遇到同样的问题(或者如果我忘记了我做了什么,哈哈)。我是在以下页面上发现的:http://matplotlib.org/1.3.1/users/artists.html

没想到y轴左右的标签可以相互独立修改。使用yticks[0].label.set_visible(False) 时,label 仅指左侧标签,因此右侧标签保持不变。为了修复它,我替换了

yticks[0].label.set_visible(False)

yticks[0].label1.set_visible(False)
yticks[0].label2.set_visible(False)

yticks[-1] 也是如此)。现在它就像一个魅力!

【讨论】:

    【解决方案2】:

    一般我发现matplotlib中的重叠问题可以通过使用来解决

    plt.tight_layout()
    

    你试过了吗?

    【讨论】:

    • 我知道这个函数,但出于几个原因,我不希望在我的绘图之间有任何填充。我已经改变了我的问题来澄清这一点,但无论如何谢谢:)
    猜你喜欢
    • 2012-05-08
    • 2021-10-29
    • 1970-01-01
    • 2020-05-11
    • 2013-06-22
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多