首页 > 解决方案 > 从 pyplot.plot 动作的循环中获取 ylim - 只有循环寄存器中的最后一个,其他一切都是 0、1

问题描述

目标 我想使用一个循环来生成不同的子图,并且在每次迭代中,我想传递每个子图的 ylims 以在另一个函数中使用。

问题 当我这样做时,我只得到最后一个子图的 ylims。其他的都是 0.0, 1.0。我正在覆盖变量:limits = plt.ylim()每次迭代时,我都意识到了这一点,但是我认为在该迭代中打印它会显示变量并将其包含在 y 限制的字典中将有助于查看发生了什么。在打印中实例和更新字典实例,出来的值都是0.0,甚至以为1.0显然不是这样的。答案似乎很明显,但是我不知道如何通过循环来保存这些值。

示例代码


    aa={'x':[1,2], 'y':[3,4]}
    bb={'x':[10,20], 'y':[30,40]}
    cc={'x':[15,23], 'y':[35,43]}
    plot_names=['aa', 'bb', 'cc']
    plot_dict={'aa':aa, 'bb':bb, 'cc':cc}
    fig, axlist = plt.subplots(len(plot_dict))
    lim_dict={}
    for jj, ax in enumerate(axlist.flat):
        print('jj = '+ plot_names[jj])
        print('ax = '+str(ax))
        ax.plot(plot_dict[plot_names[jj]]['x'], plot_dict[plot_names[jj]]['y'])
        limits=plt.ylim()
        lim_dict |= {plot_names[jj]:limits}
        print(plot_names[jj] + str(limits))
        
    print(lim_dict)

输出

jj = aa
ax = AxesSubplot(0.125,0.657941;0.775x0.222059)
aa(0.0, 1.0)
jj = bb
ax = AxesSubplot(0.125,0.391471;0.775x0.222059)
bb(0.0, 1.0)
jj = cc
ax = AxesSubplot(0.125,0.125;0.775x0.222059)
cc(34.6, 43.4)
{'aa': (0.0, 1.0), 'bb': (0.0, 1.0), 'cc': (34.6, 43.4)}

总结limits您可以在输出中看到,循环外的 前两个打印实例和打印字典都lim_dict显示值 0.0 和 1.0。为什么

系统: VSCode Windows 10 中的 Python3(版本 3.9.1 64 位)ipynb 文件

标签: pythonmatplotlib

解决方案


推荐阅读