gpt4 book ai didi

python - matplotlib NaN 与 pylab NaN 的对比

转载 作者:行者123 更新时间:2023-11-28 16:38:54 26 4
gpt4 key购买 nike

我有两段相似的 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。我已经用谷歌搜索了几天,但一无所获。任何帮助或建议将不胜感激。提前致谢

最佳答案

只是为了解释可能发生的事情:

您显示的两段代码是相同的。如果它们自己调用,它们将始终产生相同的输出。 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 session ,你这样做了:

y[10:40] = np.nan
plt.plot(x, y)
plt.savefig('fig')

因为你没有调用show ,现在的数字还是和之前一样。 “完整”线仍然存在于第二条线的下方,并且带有 NaN 的第二条线是不同的颜色,因为您已在相同的轴上绘制。

这就是为什么使用面向对象的接口(interface)是个好主意的众多原因之一。这样您就可以确切地知道您正在绘制的坐标轴和图形。

例如:

fig, ax = plt.subplots()
ax.plot(x, y)
fig.savefig('test.png')

如果您不打算这样做,至少在您需要新图形时总是明确地创建一个新图形和/或轴。 (例如,从调用 plt.figure() 开始)

关于python - matplotlib NaN 与 pylab NaN 的对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22103278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com