通过循环和函数填充matplotlib子图

Cha*_*les 9 python matplotlib subplot

我需要通过循环迭代绘制一个图的子图; 每次迭代都会调用另一个模块(=另一个py文件)中定义的函数,该函数会绘制一对子图.这是我尝试过的 - 唉不起作用:

1)在循环之前,创建一个具有足够行数和2列的图形:

 import matplotlib.pyplot as plt     
 fig, axarr = plt.subplots(nber_rows,2)
Run Code Online (Sandbox Code Playgroud)

2)在循环内部,在迭代编号iter_nber中,调用绘制每个子图的函数:

 fig, axarr = module.graph_function(fig,axarr,iter_nber,some_parameters, some_data)
Run Code Online (Sandbox Code Playgroud)

3)有问题的功能基本上是这样的; 每次迭代在同一行上创建一对子图:

 def graph_function(fig,axarr,iter_nber,some_parameters, some_data):

     axarr[iter_nber,1].plot(--some plotting 1--)
     axarr[iter_nber,2].plot(--some plotting 2--)

     return fig,axarr
Run Code Online (Sandbox Code Playgroud)

这不起作用.我在循环结束时得到一个空数字.我已经尝试了上面的各种组合,比如只在函数的返回参数中留下axarr,但无济于事.显然我不明白这个图及其子图的逻辑.

任何建议非常感谢.

Joe*_*ton 12

您发布的代码似乎非常正确.正如@hitzg所提到的那样,除了索引之外,你所做的一切看起来都不同寻常.

但是,从绘图函数返回图形和轴数组没有多大意义.(如果你需要访问图形对象,你总是可以通过它ax.figure.)但是它不会改变任何东西来传递它们并返回它们.

这是一个快速的例子,它听起来像你正在尝试做的事情.也许它有助于清除一些混乱?

import numpy as np
import matplotlib.pyplot as plt

def main():
    nrows = 3
    fig, axes = plt.subplots(nrows, 2)

    for row in axes:
        x = np.random.normal(0, 1, 100).cumsum()
        y = np.random.normal(0, 0.5, 100).cumsum()
        plot(row, x, y)

    plt.show()

def plot(axrow, x, y):
    axrow[0].plot(x, color='red')
    axrow[1].plot(y, color='green')

main()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述