我需要通过循环迭代绘制图形的子图;每次迭代都会调用另一个模块(=另一个py文件)中定义的函数,该函数会绘制一对子图。这是我试过的 - 唉不起作用:
1)在循环之前,创建一个具有足够行数和2列的数字:
import matplotlib.pyplot as plt
fig, axarr = plt.subplots(nber_rows,2)
2)在循环内部,迭代编号为iter_nber,调用绘制每个子图的函数:
fig, axarr = module.graph_function(fig,axarr,iter_nber,some_parameters, some_data)
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
这不起作用。我在循环结束时得到一个空数字。 我已经尝试了上面的各种组合,比如只在函数的返回参数中留下axarr,但无济于事。显然我不明白这个图及其子图的逻辑。
任何建议都非常感谢。
答案 0 :(得分:11)
您发布的代码似乎很正确。正如@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()