matplotlib 共享轴时显示刻度标签

5uzkadbs  于 2023-10-24  发布在  其他
关注(0)|答案(3)|浏览(107)

我正在运行以下函数:

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

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

我试图保持轴之间的共享状态,但同时在 * 所有 * 子图(包括顶部的两个)上显示x轴的刻度标签。我在文档中找不到任何方法来关闭它。有什么建议吗?或者我应该逐个轴设置x刻度标签?
我正在运行matplotlib 1.4.0,如果这很重要的话。

w41d8nur

w41d8nur1#

在Matplotlib 2.2及更高版本中,可以使用以下命令重新打开tick标签:

ax.xaxis.set_tick_params(labelbottom=True)
q3aa0525

q3aa05252#

缺少的刻度的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()]
lx0bsm1f

lx0bsm1f3#

你可以在这里找到关于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)

相关问题