Matplotlib在clf行为上的差异

时间:2017-08-03 13:04:34

标签: python matplotlib plot

根据是否直接从pyplot或通过Figure模块的实例调用clear figure函数clf(),它看起来表现不同。我使用IPython控制台和Spyder在Python 3.6中运行以下脚本。

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
    var target = $(e.target).attr("href");
    console.log(target);
    if (target == "#hesapbilgileri") {
        if ($('#anlasmakabulcheck').is(':checked')) {
            $('.test .wz-steps a[href="#first"]').tab('show');   
        }
        else
            $('.test .wz-steps a[href="#second"]').tab('show');   
    }
});

图形输出到窗口。我第一次运行脚本时,两个图形都会产生相同的行为并创建我想要的图形。如果我更改用于生成import matplotlib.pyplot as plt import numpy as np x = np.arange(-5, 5, 0.1) y = x**2 + 2*x + 5 #y = x**2 + 3*x + 6 # behaviour i want plt.figure("Good Figure") plt.clf() plt.plot(x, y) # behaviour i do not want fig, ax = plt.subplots(nrows=1, ncols=1, num="Bad Figure") #fig.clf() ax.plot(x, y) 的算法并且只是从同一个IPython控制台重新运行脚本,则第一个绘图正确更新,它将被清除,然后使用新数据重新绘制。第二个图表写入当前显示的内容并变得不可读。使用y生成当前已注释掉的第二个图形,我得到空白图形窗口。如何清除第二个图表,然后在每次运行后重新绘制新数据?

1 个答案:

答案 0 :(得分:1)

将plt.clf()放在fig和ax的创建之上。

以下代码生成相应的图。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-5, 5, 0.1)
y = x**2 + 2*x + 5
y2 = -x**2 + -2*x + 5
#y = x**2 + 3*x + 6

# behaviour i want
plt.figure("Good Figure")
plt.clf()
plt.plot(x, y)
plt.savefig('out1.png')
# behaviour i do not want
plt.clf()
fig, ax = plt.subplots(nrows=1, ncols=1, num="Bad Figure")
#fig.clf()

ax.plot(x, y2)

plt.savefig('out2.png')