我有一个简单的问题需要解决,下面是例子
import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(6, 6)) for axs in ax.flat: axs.set(ylabel='AUC')
这是输出
我希望Y-标签(AUC)在第一个子图中只出现一次(共享),其他值应保留。这是所需的输出
如何解决这个问题?请我需要你的帮助
0aydgbwb1#
因为你是在循环中设置标签的,所以你要相应地标记子图中的所有轴。你只需要标记子图行中的第一个单元格。所以这个:
for axs in ax.flat: axs.set(ylabel='AUC')
变更为:
ax[0].set_ylabel("AUC")
我还建议您在多个子图之间共享轴,因为所有的ytick都使您的图比理想的可读性稍差。您可以如下所示更改它:
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(6, 6), sharex=True, sharey=True,)
生成的图像将是:
ajsxfq5m2#
使用ax.label_outer()提供了一个更通用的解决方案,特别是在使用多行网格时。请参阅:https://matplotlib.org/stable/gallery/subplots_axes_and_figures/subplots_demo.html#stacking-subplots-in-two-directions
ax.label_outer()
import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(6, 6)) for axs in ax.flat: axs.set(ylabel='AUC') axs.label_outer()
2条答案
按热度按时间0aydgbwb1#
因为你是在循环中设置标签的,所以你要相应地标记子图中的所有轴。你只需要标记子图行中的第一个单元格。
所以这个:
变更为:
我还建议您在多个子图之间共享轴,因为所有的ytick都使您的图比理想的可读性稍差。您可以如下所示更改它:
生成的图像将是:
ajsxfq5m2#
使用
ax.label_outer()
提供了一个更通用的解决方案,特别是在使用多行网格时。请参阅:https://matplotlib.org/stable/gallery/subplots_axes_and_figures/subplots_demo.html#stacking-subplots-in-two-directions