循环遍历字典创建子图

时间:2020-08-27 21:29:21

标签: python for-loop matplotlib subplot

从问题开始,我对python还是很陌生。我的数据以三个数组(x,y和z)的形式存储在excel工作表中不同数量的工作表中,因此excel文件的每张工作表中的数据都构成一个子图,应如here所示一起进行子图绘制

在这种情况下,有三张纸。

使用pd.read_excel以字典形式加载的Excel电子表格包含每个工作表作为键以及子图的数据。由于工作表的数量不尽相同,我希望对循环中的所有工作表进行子图绘制,以使该循环读取字典中的每个数据框并创建一个包含所有代表每个工作表的子图的合成图形,最好是在公共x轴上

我尝试了以下代码,但是它创建了单独的图,并分别保存,需要我使用光栅图形编辑器软件手动将它们编译在一起。

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


loc = r'E:\Python\data.xlsx'
load = pd.read_excel(loc,sheet_name = None, header=None)

nar=list(load.keys())
nplots = len(nar)
fig, axs = plt.subplots(nrows=nplots, ncols=1, sharex=True)
for k in load:
    dem=load[k]
    x=np.array(dem[0])
    y=np.array(dem[1])
    z=np.array(dem[2])

# creating different limits for contour lines
    lmin=dem[2].min()
    lmax=dem[2].max()
    progn=(lmax-lmin)/10
    progn2=(lmax-lmin)/20
    progn0=(lmax-lmin)/5
    limit=np.arange(lmin,lmax,progn)
    limit0=np.arange(lmin,lmax,progn0)
    limit2=np.arange(lmin,lmax,progn2)
    

    fig, ax = plt.subplots(figsize=(12,4))

#cline,mcline are contour lines and con is contour fill

    cline=ax.tricontour(x,y,z,limit0, color='k')   
        
    mcline=ax.tricontour(x,y,z,limit)

    con=ax.tricontourf(x, y, z, limit2, cmap='rainbow')
    plt.colorbar(con, shrink=.5)

    ax.set_aspect('equal')
    plt.savefig(str(k)+'.png', dpi=300)
    plt.show()

我想请一位专家帮助我实现所需的循环技术。预先感谢。

1 个答案:

答案 0 :(得分:0)

您两次调用plt.subplots(),一次是在for循环之前,一次是在循环内部。前一个电话是您想要的唯一电话。代替

fig, ax = plt.subplots(figsize=(12,4))

使用新的子图创建一个新图形,您想使用现有轴,这些轴是您已经创建的图形的一部分

ax = axs[i]

其中i是要编辑的当前绘图的编号。