如何使用循环为子图添加标题?

4
我试图创建一个包含9个子图的绘图,并使用for循环为它们创建标题,以避免必须指定9次标题。然而,我的代码适用于前8个子图但不适用于最后一个。请帮帮我。
from scipy.stats import beta
import matplotlib.pyplot as plt
import numpy as np

a=[1,10,20,30,40,50,60,70,80,90]
b=[1,10,20,30,40,50,60,70,80,90]

x = np.linspace(0.001,0.999, num=100)

for i in range(9):
    plt.title('alpha=' + str(a[i])+' beta= ' + str(b[i]))
    plt.subplot(3, 3, i+1)
    plt.plot(x, beta.pdf(x, a[i], b[i]),'r-', lw=3, alpha=0.6, label='beta pdf')
    plt.xticks(np.arange(0, 1.5, 0.5))
    plt.yticks(np.arange(0, 13, 6.0))
    plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=0.4)
plt.show()

生成的图表


1
plt.titleplt.subplot 行的顺序交换(即将 plt.subplot 行放在 plt.title 行之前)。 - Charlie Haley
1个回答

2

只需改变顺序,即先使用plt.subplot()再使用plt.title()。您得到了比预期少一个标题的图形,因为您的代码在有地方绘制标题之前绘制了标题。

另外,您可以通过使用plt.figure(figsize=(12,12))改变图形的大小,以使子图不重叠。

修改后的代码:

from scipy.stats import beta
import matplotlib.pyplot as plt
import numpy as np

a=[1,10,20,30,40,50,60,70,80,90]
b=[1,10,20,30,40,50,60,70,80,90]

x = np.linspace(0.001,0.999, num=100)

plt.figure(figsize=(12,12))  # change the size of figure!
for i in range(9):
    plt.subplot(3, 3, i+1)
    plt.plot(x, beta.pdf(x, a[i], b[i]),'r-', lw=3, alpha=0.6, label='beta pdf')
    plt.xticks(np.arange(0, 1.5, 0.5))
    plt.yticks(np.arange(0, 13, 6.0))
    plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=0.4)
    plt.title('alpha=' + str(a[i])+' beta= ' + str(b[i]))  # Plot title here!!!
plt.show()

结果如下: 图片描述在此处输入

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接