如何使用子图绘制 nrows=12,ncols=2

How to use subplot to plot nrows=12,ncols=2

我正在尝试使用子图绘制 12x2(行 x 列)。但是,我的代码似乎在同一个图形上绘制了所有 12 个图形 12 次。我在下面附上了我的代码,如果有人能帮助我理解我哪里出错了,那真的对我有帮助。 注意:我正在从两个不同的文件夹中读取数据。第一列对应于文件夹中第一个文件的绘图,第二列对应于第二个文件。 我想分别在位置 [0,0] 和 [0,1] 中绘制来自第一个文件和第二个文件的第一个数据。我想对所有 12 个文件重复此操作。

fig, axs = plt.subplots(12, 2,figsize=(20,80))
for file in files: # reading data from 1st file
        with open(file,"r") as f_in: 
            reader=csv.reader(f_in)
            next(reader)
            for line in reader:
                try:
                    float_1,float_2=float(line[0]),float(line[1])
                    xData.append(float_1)
                    yData.append(float_2)
                except ValueError:
                    continue                     
        for i in range(12):
            axs[i,0].plot(xData,yData)
        xData=[]
        yData=[]                            
for file in files1:
    with open(file,"r") as f_in: 
        reader=csv.reader(f_in)
        next(reader)
        for line in reader:
            try:
                float_1,float_2=float(line[0]),float(line[1])
                xData1.append(float_1)
                yData1.append(float_2)
            except ValueError:
                continue
    for i in range(12):
        axs[i, 1].plot(xData1, yData1)            
    xData1=[]
    yData1=[]

在您的代码中,您正在绘制每个文件 axs[i,0].plot(xData,yData)axs[i,1].plot(xData1,yData1) 的所有图,因为您在一个循环 (for file in files1) 中有一个循环 (for i in range(12)) .

下面是代码中此错误的快速修复方法:

fig, axs = plt.subplots(12, 2,figsize=(20,80))
i = 0
for file in files: # reading data from 1st file
        with open(file,"r") as f_in: 
            reader=csv.reader(f_in)
            next(reader)
            for line in reader:
                try:
                    float_1,float_2=float(line[0]),float(line[1])
                    xData.append(float_1)
                    yData.append(float_2)
                except ValueError:
                    continue                     
        
        axs[i,0].plot(xData,yData)
        i+=1
        xData=[]
        yData=[]
i = 0
for file in files1:
    with open(file,"r") as f_in: 
        reader=csv.reader(f_in)
        next(reader)
        for line in reader:
            try:
                float_1,float_2=float(line[0]),float(line[1])
                xData1.append(float_1)
                yData1.append(float_2)
            except ValueError:
                continue
    axs[i, 1].plot(xData1, yData1)  
    i+=1
    xData1=[]
    yData1=[]

注意。当然文件数不能超过12个,否则会出现IndexError

NB.2 有很多更好的方法来组织代码,理想的可能是创建一个函数,将文件和轴对象作为参数并在该轴上绘制文件的数据。然后你可以遍历轴。