如何为每个次要情节添加标题

我有一个包含许多子图的图。

fig = plt.figure(num=None, figsize=(26, 12), dpi=80, facecolor='w', edgecolor='k')
fig.canvas.set_window_title('Window Title')


# Returns the Axes instance
ax = fig.add_subplot(311)
ax2 = fig.add_subplot(312)
ax3 = fig.add_subplot(313)

如何给子情节添加标题?

fig.suptitle为所有图形添加一个标题,尽管ax.set_title()存在,但后者没有为我的子图添加任何标题。

谢谢你的帮助。

< p >编辑: 修正了关于set_title()的错别字。谢谢Rutger Kassies

799455 次浏览

ax.set_title()应该为单独的子情节设置标题:

import matplotlib.pyplot as plt


if __name__ == "__main__":
data = [1, 2, 3, 4, 5]


fig = plt.figure()
fig.suptitle("Title for whole figure", fontsize=16)
ax = plt.subplot("211")
ax.set_title("Title for first plot")
ax.plot(data)


ax = plt.subplot("212")
ax.set_title("Title for second plot")
ax.plot(data)


plt.show()

你能检查一下这个代码是否适用吗?也许以后会有什么东西覆盖它们?

ax.title.set_text('My Plot Title')似乎也能工作。

fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)
ax1.title.set_text('First Plot')
ax2.title.set_text('Second Plot')
ax3.title.set_text('Third Plot')
ax4.title.set_text('Fourth Plot')
plt.show()

matplotlib add title on subplots

一个简略的回答假设 import matplotlib.pyplot as plt: < / p >

plt.gca().set_title('title')

如:

plt.subplot(221)
plt.gca().set_title('title')
plt.subplot(222)
etc...

这样就不需要多余的变量了。

如果你想让它更短,你可以这样写:

import matplotlib.pyplot as plt
for i in range(4):
plt.subplot(2,2,i+1).set_title(f'Subplot n°{i+1}')
plt.show()

它可能不太清楚,但你不需要更多的行或变量

如果你有多个图像,你想要循环遍历它们,并逐个显示它们和标题-这就是你可以做的。不需要显式地定义ax1、ax2等。

    问题是你可以在代码的第1行中定义动态轴(ax) 你可以在循环中设置它的标题
  1. 二维数组的行数为轴(ax)的长度(len)
  2. 每行有2项,即它是列表中的列表(第2点)
  3. Set_title可用于设置标题,一旦适当的轴(ax)或subplot被选择。
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 2, figsize=(6, 8))
for i in range(len(ax)):
for j in range(len(ax[i])):
## ax[i,j].imshow(test_images_gr[0].reshape(28,28))
ax[i,j].set_title('Title-' + str(i) + str(j))
fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=1, ncols=4,figsize=(11, 7))


grid = plt.GridSpec(2, 2, wspace=0.2, hspace=0.5)


ax1 = plt.subplot(grid[0, 0])
ax2 = plt.subplot(grid[0, 1:])
ax3 = plt.subplot(grid[1, :1])
ax4 = plt.subplot(grid[1, 1:])


ax1.title.set_text('First Plot')
ax2.title.set_text('Second Plot')
ax3.title.set_text('Third Plot')
ax4.title.set_text('Fourth Plot')


plt.show()

enter image description here

我越来越倾向于使用的一个解决方案是:

import matplotlib.pyplot as plt


fig, axs = plt.subplots(2, 2)  # 1
for i, ax in enumerate(axs.ravel()): # 2
ax.set_title("Plot #{}".format(i)) # 3
  1. 创建任意数量的轴
  2. axis .ravel()将2-dim对象转换为行大调样式的1-dim向量
  3. 将标题分配给当前轴对象

你只能通过迭代给每个图形一个不同的标题和标签。

titles = {221: 'First Plot', 222: 'Second Plot', 223: 'Third Plot', 224: 'Fourth Plot'}
fig = plt.figure()
for x in range(221,225):
ax = fig.add_subplot(x)
ax.title.set_text(titles.get(x))


plt.subplots_adjust(left=0.1,
bottom=0.1,
right=0.9,
top=0.9,
wspace=0.4,
hspace=0.4)
plt.show()

输出:

enter image description here

从matplotlib 3.4.3开始,Figure.add_subplot函数支持标题为:

fig.add_subplot(311, title="first")
fig.add_subplot(312, title="second")

为了完整起见,所要求的结果也可以在不显式引用图轴的情况下实现,如下所示:

import matplotlib.pyplot as plt


plt.subplot(221)
plt.title("Title 1")


plt.subplot(222)
plt.title("Title 2")


plt.subplot(223)
plt.title("Title 3")


plt.subplot(224)
plt.title("Title 4")

enter image description here

如果你有重叠标签的问题,在最后一个绘图之后使用plt.tight_layout()