根据是否直接从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
生成当前已注释掉的第二个图形,我得到空白图形窗口。如何清除第二个图表,然后在每次运行后重新绘制新数据?
答案 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')