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

时间:2016-02-25 21:16:50

标签: python matplotlib

我正在尝试创建一个包含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()

The resulting plot

1 个答案:

答案 0 :(得分:0)

只需更改顺序,即plt.title()之后的plt.subplot()。您得到的标题比预期少,因为您的代码在标题可以绘制之前就已经绘制了标题。

此外,您可以通过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()

结果是: Evenly spaced subplots with titles