我有两个类似的matplotlib代码,可以产生不同的结果。
1:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
y = np.linspace(0,10,100)
y[10:40] = np.nan
plt.plot(x,y)
plt.savefig('fig')
2:
from pylab import *
x = linspace(0,10,100)
y = linspace(0,10,100)
y[10:40] = np.nan
plot(x,y)
savefig('fig')
代码#1产生一条直线,NaN区域用不同颜色的实线填充
代码#2生成一个直线的图形,但不用一条线填充NaN区域。相反,那里存在差距。
如何使代码#1代替NaN代码#2产生差距。我已经谷歌搜索了几天,并没有得到什么。任何帮助或建议将不胜感激。提前致谢
答案 0 :(得分:3)
只是为了解释可能发生的事情:
您展示的两段代码完全相同。如果自己调用它们,它们将始终产生相同的输出。 pylab
基本上只是几行代码:(除此之外还有更多内容,但这是基本的想法。)
from numpy import *
from matplotlib.mlab import *
from matplotlib.pyplot import *
pylab.plot
绝对没有办法引用与plt.plot
不同的函数
但是,如果您只是致电plt.plot
(或pylab.plot
,它们是相同的功能),则会在当前数字上绘制。
如果您之前在该图上绘制了某些内容,它仍将存在。 (如果您熟悉matlab,matplotlib默认为hold('on')
。您可以使用plt.hold
更改此设置,但最好在python中更明确,只需创建一个新数字。)
基本上,你可能会这样做:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
y = np.linspace(0,10,100)
plt.plot(x,y)
plt.savefig('fig')
然后,在同一个交互式ipython
会话中,您执行了此操作:
y[10:40] = np.nan
plt.plot(x, y)
plt.savefig('fig')
因为你没有打电话给show
,所以现在的数字仍然和以前一样。 “完整”线仍然存在于第二条线下方,而具有NaN的第二条线是不同的颜色,因为您绘制在相同的轴上。
这是使用面向对象接口的好主意的众多原因之一。通过这种方式,您可以清楚地了解 哪些轴并计算出您的情节。
例如:
fig, ax = plt.subplots()
ax.plot(x, y)
fig.savefig('test.png')
如果您不打算这样做,至少在您想要一个新图时总是明确地创建一个新的图形和/或轴。 (例如,先致电plt.figure()
)