【问题标题】:How to add labels to the axes of subplots如何为子图的轴添加标签
【发布时间】:2020-10-01 12:37:59
【问题描述】:

我将 8 个子图绘制成如下图:

import matplotlib.pyplot as plt
fig, axs = plt.subplots(8)
label = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
data = [0.6, 0.4, 1.3, 0.8, 0.9, 1.0, 1.6, 0.2]
plt.xlim(0,2)
for i in range(8):
    axs[i].get_yaxis().set_visible(False)
    axs[i].get_xaxis().set_visible(False)
    axs[i].set_xlim([0, 2])
    axs[i].axvline(data[i],linestyle='--')
    axs[i].get_yaxis().set_visible(False)
axs[7].get_xaxis().set_visible(True)
plt.show()

这看起来像:

为了标记子图,我想在子图 i 的左侧写 label[i](参见上面的代码)。你怎么能这样做?

【问题讨论】:

  • 您好,您要在 x 轴或 y 轴上添加标签吗?此外,您可以为每个 axs[i] 添加一个标题。你要哪一个?
  • @DanielLima 例如,对于第一个子图,我只想将“A”写在它的左边(在 y 轴上)。我没有空间在子情节中放置标题。
  • axs[i].set_ylabel(label[i])?
  • @bnaecker 然后我将如何摆脱数字 y 轴标签,因为我必须这样做 axs[i].get_yaxis().set_visible(True) ?
  • @Anush 你没有,只需将刻度设置为空:axs[i].set_yticks(())

标签: python matplotlib


【解决方案1】:

(作为一种快速修复),您也许可以使用Axes.text,例如:

axs[i].text(-0.1,0.2,label[i])

根据标签的长度,根据需要调整 xy 参数。

如 cmets 中所述,另一个(更好)选项是保持 y 轴可见,但随后将刻度设置为空:

axs[i].set_yticks(())
axs[i].set_ylabel(label[i], rotation=0, ha='right', va='center')

【讨论】:

  • 非常感谢。
【解决方案2】:

正如我在 cmets 中提到的,正确的方法是不关闭 y 轴,并移除刻度。

诀窍是删除带有axs[i].get_yaxis().set_visible(False)的两行并添加以下两行:

axs[i].tick_params(left=False, labelleft=False)
axs[i].set_ylabel(label[i])

请考虑以下代码作为完整答案(已编辑以包含 bnaecker 的建议):

import matplotlib.pyplot as plt
plt.close('all')
fig, axs = plt.subplots(8, sharex="col")
label = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
data = [0.6, 0.4, 1.3, 0.8, 0.9, 1.0, 1.6, 0.2]
plt.xlim(0, 2)
for i in range(8):
    axs[i].set_xlim([0, 2])
    axs[i].tick_params(left=False, labelleft=False)
    axs[i].axvline(data[i], linestyle='--')
    axs[i].set_ylabel(label[i])
plt.show()

图形应该是这样的:

【讨论】:

  • 这是一个不错的答案,但不需要设置 x 轴不可见的业务。我们可以使用fig, axs = plt.subplots(8, sharex="col") 直接在所有子图之间共享 x 轴。这样就不需要在每个轴上调用set_visible
  • 非常感谢。
猜你喜欢
  • 1970-01-01
  • 2020-11-05
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多