Python 在matplotlib中共享轴时显示记号标签

Python 在matplotlib中共享轴时显示记号标签,python,matplotlib,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

我正在运行以下函数:

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,如果这很重要的话。

缺少的标记已将其
可见属性设置为
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()]

在Matplotlib 2.2及更高版本中,可以使用以下选项重新启用记号标签:

ax.xaxis.set_tick_params(labelbottom=True)

您可以在此处找到有关matplotlib标签的其他信息:

在我的情况下,我需要打开所有x和y标签,此解决方案可以工作:

for ax in axes.flatten():
    ax.xaxis.set_tick_params(labelbottom=True)
    ax.yaxis.set_tick_params(labelleft=True)

我把它包装在一个函数中,它的工作原理与上面所示的完全相同。这似乎不再起作用了。关于如何实现matplotlib 2.0这篇文章,有什么想法吗?我没有费心检查2.0,但在MPL 2.1.2中,这确实有效。但是,默认情况下,标签在所有轴上都可见。因此,这个技巧应该只在使用
tk.set_visible(False)
@MeshachBlue隐藏标签时才有必要,我也在使用2.0,而上面的解决方案对我不起作用。我试图修补一些东西,但没有成功;最后,我从子地块创建中删除了
shary
,并手动设置每个轴的
ylim
s,以获得具有ticklebels的相同y轴。我在Matplotlib 2.2中也尝试过这一点,但似乎不起作用。请参阅下面的解决方案。谢谢!这是唯一对我有效的解决方案。
ax.yaxis.set_tick_params(labelbottom=True)
也适用于
matplotlib==3.0.3
如果有人在搜索极坐标图/雷达图,它就是
ax.yaxis.set_tick_params(labelbottom=True)