如何在matplotlib中叠加图形

3

我在多个模块中创建了几个图形,我想将它们叠加在我的main.py中。

我能否返回一个可重复使用的图形/绘图,以便在main.py中创建组合图形?

谢谢!

1个回答

4

解决方案是在main.py中设置一个figure / axis,然后将axis句柄传递给每个模块。 以下是最简单的示例:

import matplotlib.pyplot as plt
import numpy as np
#from mod import plotsomefunction
#from diffrentmod import plotsomeotherfunction

def plotsomefunction(ax, x):

    return ax.plot(x, np.sin(x))

def plotsomeotherfunction(ax, x):

    return ax.plot(x,np.cos(x))


fig, ax = plt.subplots(1,1)
x = np.linspace(0,np.pi,1000)
l1 = plotsomefunction(ax, x)
l2 = plotsomeotherfunction(ax, x)
plt.show()

这里的函数代表模块。

或者,您可以在主模块中创建一个图形,并使用plt.sca将其添加到每个模块的当前轴上。但是这似乎是一种不太健壮的解决方案。


太棒了!非常感谢! 我现在正在苦恼一个与主题无关的问题:如何使用“basemap”对象实现相同的功能。简而言之,我在一个模块中创建了一个“basemap”图,并希望在其他模块中使用它进行绘图。有什么想法吗? - Shai Efrati
抱歉,我没有使用过 basemap。看起来 basemap 只是使用 matplotlib 进行绘图的映射。因此,您应该能够以相同的方式将其添加到当前图形/轴中。根据 http://matplotlib.org/basemap/users/examples.html: "您还可以使用与 Basemap 相关联的 Axes 实例直接在地图上绘制 matplotlib pyplot[...]。"也许 ax = map.get_axis() - Ed Smith
很遗憾,“basemap”没有“map.get_axis()”函数。但是它有一个可以引用到“ax”的“map.ax”。我尝试了一下,结果出现了“AttributeError: 'Figure' object has no attribute 'add_collection'”错误。现在我需要理解为什么会出现这个错误以及如何解决它。 - Shai Efrati
嗨@EdSmith。基于您在这里的帮助,我也找到了解决basemap问题的方法。我在这里发布了一个答案:https://dev59.com/rIzda4cB1Zd3GeqPnID0#31172618 - Shai Efrati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接