如何在Matplotlib中的子图中添加标题?


225

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

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()存在,但后者不向我的子图添加任何标题。

谢谢您的帮助。

编辑:纠正了有关的错字set_title()。谢谢罗格·卡西斯

Answers:


201

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在子图中添加标题


对于任何对直方图的字体大小有疑问的人,奇怪的是减少垃圾箱的数量让我增加了它。去从500到100
mLstudent33

如果需要能够指定字体大小,请ax.set_title('title', fontsize=16)改用。
Tobias PG

234

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()

您可以检查该代码是否适合您?也许以后会覆盖某些内容?


1
这对我
有用

41

一个简短的答案假设 import matplotlib.pyplot as plt

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

如:

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

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


8

如果要缩短它,可以编写:

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

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


1

如果您有多张图片,并且想要循环浏览它们,并与标题一起按1顺序显示-这就是您可以执行的操作。无需显式定义ax1,ax2等。

  1. 要注意的是,您可以像代码的第1行一样定义动态轴(ax),并且可以在循环中设置其标题。
  2. 2D阵列的行是轴(ax)的长度(len)
  3. 每行有2个项目,即列表中的列表(第2点)
  4. 一旦选择了正确的轴(ax)或子图,set_title可用于设置标题。
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))

1
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()

在此处输入图片说明


0

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

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. axs.ravel()将您的2维对象转换为行主要样式的1维矢量
  3. 将标题分配给当前轴对象
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.