【问题标题】:Creating subplots in loop iterating through dictionary在遍历字典的循环中创建子图
【发布时间】:2020-12-16 20:00:43
【问题描述】:

我对 python 还很陌生,首先是这个问题。我的数据以三个数组(x、y 和 z)的形式存储在 excel 工作表中的不同数量的工作表中,这样 excel 文件的每个工作表中的数据构成一个子图,并且应该像 所示那样完全绘制子图。

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

使用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()

我想请一位专家帮助我实现所需的循环技术。提前致谢。

【问题讨论】:

    标签: python for-loop matplotlib subplot


    【解决方案1】:

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

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

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

    ax = axs[i]
    

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

    【讨论】:

    • 感谢@Keon 对我的问题感兴趣。您能否就如何定义i 提出更多建议?
    • 一个例子是修改你的循环以使用“for i, k in enumerate(load):” 这将为你正在制作的每个新绘图提供一个索引。您也可以在 for 循环之前简单地定义 i = 0,并在其底部执行 i+=1。
    猜你喜欢
    • 2016-01-11
    • 1970-01-01
    • 2022-01-11
    • 2023-04-03
    • 2023-03-12
    • 2022-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多