簡體   English   中英

在 matplotlib 中共享軸時顯示刻度標簽

[英]Show tick labels when sharing an axis in 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

以下是我使用自己的一些示例數據得到的結果:

在此處輸入圖片說明

我試圖保持軸之間的共享狀態,但同時在所有子圖(包括前兩個)上顯示 x 軸的刻度標簽。 我在文檔中找不到任何方法來關閉它。 有什么建議么? 還是我應該逐軸設置 x 刻度標簽?

如果這很重要,我正在運行 matplotlib 1.4.0。

在 Matplotlib 2.2 及更高版本中,可以使用以下方法重新打開刻度標簽:

ax.xaxis.set_tick_params(labelbottom=True)

丟失的刻度的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()]

您可以在此處找到有關 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM