在共享一个轴时显示刻度标签

33
我正在运行以下函数:
def plot_variance_analysis(indices, stat_frames, legend_labels, shape):
    x = np.linspace(1, 5, 500)
    fig, axes = plt.subplots(shape[0], shape[1], sharex=True sharey=True)
    questions_and_axes = zip(indices, axes.ravel())
    frames_and_labels = zip(stat_frames, legend_labels)
    for qa in questions_and_axes:
        q = qa[0]
        ax = qa[1]
        for fl in frames_and_labels:
            frame = fl[0]
            label = fl[1]
            ax.plot(x, stats.norm.pdf(x, frame['mean'][q], frame['std'][q]), label=label)
            ax.set_xlabel(q)
            ax.legend(loc='best')
    plt.xticks([1,2,3,4,5])
    return fig, axes

这是我使用一些自己的样本数据得到的结果:

enter image description here

我正在尝试在坐标轴之间保持共享状态,但同时在所有子图上(包括顶部两个)显示x轴的刻度标签。我在文档中找不到任何关闭此功能的方法。有什么建议吗?还是我应该逐个设置x轴的刻度标签?
我正在使用matplotlib 1.4.0版本,如果这很重要的话。
3个回答

63

在 Matplotlib 2.2 及以上版本中,可以使用以下方法重新显示刻度标签:

ax.xaxis.set_tick_params(labelbottom=True)

谢谢!这是唯一一个对我有效的解决方案。 - Jamie
5
ax.yaxis.set_tick_params(labelbottom=True)matplotlib==3.0.3 中也能正常使用。 - Alex Fortin
如果有人正在搜索极地/雷达图表,那么它就是 ax.yaxis.set_tick_params(labelbottom=True) - jamfie
我发现在Jupyter笔记本中运行for循环时,必须在创建图形的初始for循环之后,在单独的for循环中进行。 - user3826929

27

丢失的刻度线是因为它们的visible属性被设置为False。这在plt.subplot的文档中有说明。解决这个问题最简单的方法可能是执行以下操作:

for ax in axes.flatten():
    for tk in ax.get_yticklabels():
        tk.set_visible(True)
    for tk in ax.get_xticklabels():
        tk.set_visible(True)

在这里,我已经循环遍历了所有的轴,这并不一定是必要的,但是这样做代码更简单。如果你愿意的话,你也可以用列表推导式进行丑陋的一行代码实现:

[([tk.set_visible(True) for tk in ax.get_yticklabels()], [tk.set_visible(True) for tk in ax.get_yticklabels()]) for ax in axes.flatten()]

我将这个代码块封装在一个函数中,它的运行效果与上面展示的完全一致。 - jimh
5
这似乎不再起作用了。有没有关于如何在matplotlib 2.0之后实现这个的想法? - SimonBiggs
我还没有检查过2.0版本,但在MPL 2.1.2中,这确实有效。然而,默认情况下,刻度标签在所有轴上都是可见的。因此,使用tk.set_visible(False)隐藏刻度标签应该是必要的技巧。 - farenorth
@MeshachBlue 我也使用的是2.0版本,上述解决方法对我无效。我尝试了一些调整,但没有成功;最后我从子图创建中删除了sharey并手动设置了每个轴的ylim以获得相同的y轴刻度标签。 - ALM
我也尝试在Matplotlib 2.2中实现,但似乎不起作用。请参见下面的解决方案。 - David Stansby

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接