【问题标题】:Plotting to 1 figure using multiple functions with Matplotlib, Python使用 Matplotlib、Python 的多个函数绘制到 1 个图形
【发布时间】:2015-02-25 18:34:04
【问题描述】:

我有一个主程序main.py,我在其中调用各种函数,每个函数都将一些东西绘制到一个数字上。即所有函数图都将细节附加到 1 个主图。

目前我将其设置为,例如:

main.py:

import matplotlib.pylab as plt    

a,b,c = 1,2,3

fig = func1(a,b,c)

d,e,f = 4,5,6

fig = func2(d,e,f)

plt.show()

函数1:

def func1(a,b,c):
    import matplotlib.pylab as plt
    ## Do stuff with a,b and c ##
    fig = plt.figure()    
    plt.plot()
    return fig

函数2:

def func2(d,e,f):
    import matplotlib.pylab as plt
    ## Do stuff with d,e and f ##
    fig = plt.figure()    
    plt.plot()
    return fig

这种方法已经成功了一半,但它为每个函数绘制了单独的图形,而不是叠加它们。

如何获得 1 个图,所有图的结果相互叠加?

【问题讨论】:

  • plt.figure() 创建一个新图形。如果你想绘制一个现有的,不要在你的绘图函数中使用它。
  • 如果我从函数中删除 plt.figure() 并直接在函数中绘图,它仍然会为每个函数创建一个新图形。
  • 我不相信你:) - 请注意,你没有在你的函数中绘制任何东西,所以你的示例代码很难验证它是否有效。
  • 哈哈,函数里有“plt.plot”这行,是不是在画什么?如果那条线不存在,我如何创建一个图形对象发送到主程序以在那里绘制?

标签: python matplotlib plot


【解决方案1】:

这个puprose最好使用OO接口。见http://matplotlib.org/faq/usage_faq.html#coding-styles

import matplotlib.pyplot as plt    

a = [1,2,3]
b = [3,2,1]

def func1(ax, x):
    ax.plot(x)

def func2(ax, x):
    ax.plot(x)

fig, ax = plt.subplots()
func1(ax, a)
func2(ax, b)

像这样简单的函数看起来很傻,但是当你想做更复杂的事情时,遵循这种风格会让事情变得不那么痛苦。

【讨论】:

  • 谢谢,那个指南很有见地。
  • 是否可以/建议编写一个函数,我可以输入ax.func1(),然后输入ax.func2()
【解决方案2】:

这应该可行。请注意,我只创建了一个图形并使用pyplot 接口对其进行绘图,而无需显式获取对图形对象的引用。

import matplotlib.pyplot as plt    

a = [1,2,3]
b = [3,2,1]

def func1(x):
    plt.plot(x)

def func2(x):
    plt.plot(x)

fig = plt.figure()
func1(a)
func2(b)

【讨论】:

  • 请不要使用 pylab,使用import matplotlib.pyplot as plt 进行状态机绘图,使用import numpy as np 进行数学相关代码。
  • @tcaswell,import matplotlib.pyplot as pltimport matplotlib.pylab as plt 有什么区别?对我来说,pylab 似乎没有将 numpy 拉入命名空间。
  • 这样做 is 比批量导入要好,但是所有 numpy 都是批量导入到 pylab 命名空间中的。 mpl 和 ipython 的官方立场是劝阻/不要真正谈论 pylab。折旧它会很好,但是使用它的例子太多了。
猜你喜欢
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2019-06-24
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多