在matplotlib中共享轴时显示刻度标签

Jam*_*her 15 python matplotlib

我正在运行以下功能:

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
Run Code Online (Sandbox Code Playgroud)

以下是我自己的一些示例数据:

在此输入图像描述

我正在尝试维持轴之间的共享状态,但同时在所有子图(包括前两个)上显示x轴的刻度标签.我找不到任何方法在文档中关闭它.有什么建议?或者我应该逐轴设置x刻度标签?

我正在运行matplotlib 1.4.0,如果这很重要的话.

Dav*_*sby 22

在Matplotlib 2.2中,可以使用以下命令重新打开刻度标签:

ax.xaxis.set_tick_params(labelbottom=True)
Run Code Online (Sandbox Code Playgroud)

  • `ax.yaxis.set_tick_params(labelbottom = True)`也可以在`matplotlib == 3.0.3`中使用 (2认同)

far*_*rth 21

缺少的刻度已将其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)
Run Code Online (Sandbox Code Playgroud)

在这里,我已经遍历了所有轴,您不一定需要这样做,但代码更简单.如果您愿意,也可以在丑陋的班轮中使用列表推导来执行此操作:

[([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()]
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不再起作用了.关于如何实现这个帖子matplotlib 2.0的任何想法? (2认同)

小智 7

您可以在此处找到有关 matplotlib 标签的更多信息: https://matplotlib.org/3.1.3/api/_as_gen/matplotlib.axes.Axes.tick_params.html

就我而言,我需要打开所有 x 和 y 标签,此解决方案有效:

for ax in axes.flatten():
    ax.xaxis.set_tick_params(labelbottom=True)
    ax.yaxis.set_tick_params(labelleft=True)
Run Code Online (Sandbox Code Playgroud)