从函数调用pyplot以在同一图上绘制多条线

时间:2017-11-15 13:38:04

标签: python matplotlib plot visualization

当我想在同一个地块上挖出多行时,我可以根据需要多次调用pyplot.plot(x,y),然后用pyplot.show()显示情节。但是,当我定义一个要绘制的函数时,我多次调用该函数,而不是在同一个图上有多行,我会得到多个图。例如:

import numpy as np
import matplotlib.pyplot as plt

def plotsub(x, y):
    plt.plot(x, y)
    plt.show()

x = np.arange(0,10,1);
y = x*x   
plt.plot(x,y)
plt.plot(x*10,y)
plt.show()

plotsub(x,y)
plotsub(x*10,y)

上述代码的输出如下:enter image description here

但是,我希望对plotsub的两次调用与多次调用plt.plot的行为一样。

基本上,我试图获取pyplot的句柄,将其作为参数发送给函数,我找不到该怎么做。

1 个答案:

答案 0 :(得分:2)

这是因为您的plt.show()功能中有plotsub。因此,每次调用plotsub时,matplotlib都会按预期显示该图。

如果您只想在调用plotsub后显示情节,则可以将其移到该功能之外:

import numpy as np
import matplotlib.pyplot as plt

def plotsub(x, y):
    plt.plot(x, y)

x = np.arange(0,10,1);
y = x*x   

plotsub(x,y)
plotsub(x*10,y)
plt.show()

或者,您可以将其保留在函数内部,但将其设置为可选,因此您只能在最后一次调用plotsub时显示。类似的东西:

import numpy as np
import matplotlib.pyplot as plt

def plotsub(x, y, show=False):
    plt.plot(x, y)
    if show:
        plt.show()

x = np.arange(0,10,1);
y = x*x   

plotsub(x, y)
plotsub(x*10, y, show=True)

最后,要获得对您在函数中绘制的线的引用,您可以return来自函数,例如:

def plotsub(x, y, show=False):
    line, = plt.plot(x, y)
    if show:
        plt.show()
    return line

l1 = plotsub(x, y)