将第二个图添加到现有的matplotlib图表

时间:2017-12-17 19:24:28

标签: python python-2.7 matplotlib

我希望有一个函数在调用时将图添加到现有图表中。现在我的空图显示,但调用函数似乎永远不会发生,因为它等到我关闭图表窗口。然后程序结束而不重新打开图表窗口。

import numpy as np
import matplotlib.pyplot as plt
import time

fig, ax = plt.subplots()
plt.show()
def plotting(slope, intercept):

    x_vals = np.array(ax.get_xlim())
    y_vals = intercept + slope * x_vals
    ax.plot(x_vals, y_vals, '-')
    plt.show()

plotting(10,39)
time.sleep(1)
plotting(5,39)

2 个答案:

答案 0 :(得分:3)

plt.show()意味着在脚本结束时调用一次。它将一直阻止,直到绘图窗口关闭。

您可以使用交互模式(plt.ion())并在中间步骤(plt.draw())绘制绘图。要获得暂停,请不要使用time.sleep()因为它会让应用程序按字面意思进入睡眠状态(可能会导致冻结窗口)。相反,请使用plt.pause()。最后,您可以再次关闭交互模式(plt.ioff()),最后调用plt.show()以使地块保持打开状态。

import numpy as np
import matplotlib.pyplot as plt

plt.ion()
fig, ax = plt.subplots()

def plotting(slope, intercept):

    x_vals = np.array(ax.get_xlim())
    y_vals = intercept + slope * x_vals
    ax.plot(x_vals, y_vals, '-')
    plt.draw()

plotting(10,39)
plt.pause(1)
plotting(5,39)

plt.ioff()
plt.show()

答案 1 :(得分:2)

将可选关键字参数block=False发送至plt.show()

说明:绘图窗口阻止程序继续。发送此参数将允许程序继续。 请注意,如果仅使用该参数并且程序结束,则关闭绘图窗口。因此,您可能希望在程序结束时调用plt.show(block=True)plt.waitforbuttonpress()

我个人会为你自己的函数添加一个块参数:

def plotting(slope, intercept, block=True):

    x_vals = np.array(ax.get_xlim())
    y_vals = intercept + slope * x_vals
    ax.plot(x_vals, y_vals, '-')
    plt.show(block=block)

plotting(10,39,False)
time.sleep(1)
plotting(5,39)