Matplotlib:当绘图右侧的刻度时隐藏特定的y刻度标签

时间:2014-05-23 15:13:51

标签: python matplotlib plot

我正在创建一个包含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)

这似乎适用于左列,但在右列中,重叠的刻度仍然可见。有谁知道为什么会这样,以及如何解决它?我似乎无法弄明白。

2 个答案:

答案 0 :(得分: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]相同)。现在它就像一个魅力!

答案 1 :(得分:-1)

一般来说,我发现matplotlib中的重叠问题可以通过

来解决
plt.tight_layout()
你尝试过吗?