我正在创建一个包含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)
这似乎适用于左列,但在右列中,重叠的刻度仍然可见。有谁知道为什么会这样,以及如何解决它?我似乎无法弄明白。
答案 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()
你尝试过吗?