【发布时间】: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