matplotlib - plt.figure() 冻结问题

2 投票
2 回答
610 浏览
提问于 2025-04-18 09:04

我有一个函数,它用来绘制图形,然后把图形保存成png文件。简化的代码如下:

def render_plot(self, parameter1, parameter2):

    dates = get_my_dates()
    values = get_my_values()
    fig = plt.figure() # freezes here when calling render_plot for the 2nd or 3rd time!
    ax = fig.add_subplot(111)

    ... # performing some calculations and drawing plots

    ax.plot_date(dates, values, '-', marker='o')

    plt.savefig("media/plot.png")
    plt.cla()
    plt.clf()
    plt.close()

这个函数在执行到“fig = plt.figure()”这一行时会卡住(CPU使用率达到100% - 是不是进入了无限循环?),但只有在第二次或第三次调用这个函数时才会出现这种情况,第一次调用时一切正常,图形也绘制得很好。可能是什么原因呢?

2 个回答

-1

这可能不是问题的原因,但首先,你不需要

ax=fig.add_subplot(111)

你可以试试直接用

ax = plt.gca()

然后,注释掉

plt.close()

这可能会有帮助。只是个猜测。

0

使用 fig = plt.figure() 这行代码会导致我的 PyQt5 程序卡住。

我不太清楚具体原因,但我找到了一种不错的解决方法,对我来说有效。

解决方法是:
matplotlib.Figure 导入 Figure
然后用 fig1 = Figure() 创建一个新的图形对象,
接着用 ax1 = fig1.add_subplot() 添加一个子图。

撰写回答