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

问题描述 投票:0回答:2

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

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)
python python-2.7 matplotlib
2个回答
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()

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)
© www.soinside.com 2019 - 2024. All rights reserved.