Python 中 for 循环中每个子图的单独标题

Seperate title for each subplot in a for loop in Python

我正在尝试在 for 循环中使用子图,我可以绘制我的所有图表,但我不能给它们单独的 x 和 y 标签和标题。只是最后一个应用了。

import numpy as np
import astropy
import matplotlib.pyplot as plt
import pandas as pd

#Import 18 filesnames with similar names
from glob import glob
filenames = glob('./*V.asc')
df = [np.genfromtxt(f) for f in filenames]

A = np.stack(df, axis=0)

#Begin subplot
nrows = 3
ncols = 6
fig, ax = plt.subplots(nrows = nrows, ncols = ncols, figsize=(30,15))

#Loop over each filename i, row j and column k
i = 0
for j in range(0, nrows):
    for k in range(0, ncols):
        ax[j,k].plot(A[i,:,0], A[i,:,1])
        plt.title(filenames[i], fontsize = '25')
        i += 1
        plt.subplots_adjust(wspace=.5, hspace=.5)

fig.show()

我可以在单独的图中绘制它,所以总共 18 个并且效果很好

for i in range(0, len(A)):

    plt.figure(i)
    plt.title(filenames[i], fontsize = '30')
    plt.plot(A[i,:,0], A[i,:,1])
    plt.xlabel('Wavelength [Å]', fontsize = 20)
    plt.ylabel('Flux Density [erg/s/cm^2/Å]', fontsize = 20)
    plt.xticks(fontsize = 20)
    plt.yticks(fontsize = 20)
    

我每次迭代 i 更新标题,与子图相同,所以我不明白为什么它不起作用。 感谢任何输入!

plt.title()作用于当前轴,通常是最后创建的轴,而不是你想的轴。

一般来说,如果你有多个轴,你最好使用 matplotlib 的面向对象接口而不是 pyplot 接口。参见 usage guide

替换:

plt.title(filenames[i], fontsize = '25')

来自

ax[j,k].set_title(filenames[i], fontsize = '25')