如何理解matplotlib.pyplot.contour的代码?
How to understand the code for matplotlib.pyplot.contour?
我发现我正在编写的函数与 matplotlib.pyplot 中的轮廓函数的工作方式相似(但不完全相同)。我正在尝试阅读 python 以详细了解它的工作原理。
有人可以指出代码中在给定级别找到第一个点并开始 "following" 的位置吗?此外,它在哪里决定它是否找到了第二个不同的位置,在该位置它跟随一组不同的点,这些点也具有相同的水平?
例如,其中一些等高线显示了 tan 从正无穷大环绕到负无穷大的位置。我想避免这些 'zeros'。看看这些图:
def nanifbig(f, lo, hi):
g = f.copy()
g[g<lo] = np.nan
g[g>hi] = np.nan
return g
import numpy as np
import matplotlib.pyplot as plt
zero = np.array([0.0])
x = np.linspace(0, 8, 401)
y = np.linspace(0, 4, 201)
X, Y = np.meshgrid(x, y)
extent = [x[0], x[-1], y[0], y[-1]]
F = np.tan(X + 0.02*Y**2)
lo, hi = -2, 2
Fc = F.clip(lo, hi)
Fnanifbig = nanifbig(F, lo, hi)
Fnan = F.copy()
Fnan[:] = np.nan
plt.figure()
plt.subplot(2,2,1)
plt.imshow(Fc, origin='lower', extent=extent)
plt.contour(Fc, zero, linewidths=2, extent=extent)
plt.subplot(2,2,2)
plt.imshow(Fnanifbig, origin='lower', extent=extent)
plt.contour(Fc, zero, linewidths=2, extent=extent)
plt.subplot(2,2,3)
plt.imshow(Fnan, origin='lower', extent=extent)
plt.contour(Fc, zero, linewidths=2, extent=extent)
plt.subplot(2,2,4)
plt.plot(x, F[0,:])
plt.show()
非常感谢您的帮助!
@Joe Kington 提供了包含答案的评论。请求的代码在 C 中,可以在 https://github.com/matplotlib/matplotlib/blob/master/src/cntr.c
找到
我发现我正在编写的函数与 matplotlib.pyplot 中的轮廓函数的工作方式相似(但不完全相同)。我正在尝试阅读 python 以详细了解它的工作原理。
有人可以指出代码中在给定级别找到第一个点并开始 "following" 的位置吗?此外,它在哪里决定它是否找到了第二个不同的位置,在该位置它跟随一组不同的点,这些点也具有相同的水平?
例如,其中一些等高线显示了 tan 从正无穷大环绕到负无穷大的位置。我想避免这些 'zeros'。看看这些图:
def nanifbig(f, lo, hi):
g = f.copy()
g[g<lo] = np.nan
g[g>hi] = np.nan
return g
import numpy as np
import matplotlib.pyplot as plt
zero = np.array([0.0])
x = np.linspace(0, 8, 401)
y = np.linspace(0, 4, 201)
X, Y = np.meshgrid(x, y)
extent = [x[0], x[-1], y[0], y[-1]]
F = np.tan(X + 0.02*Y**2)
lo, hi = -2, 2
Fc = F.clip(lo, hi)
Fnanifbig = nanifbig(F, lo, hi)
Fnan = F.copy()
Fnan[:] = np.nan
plt.figure()
plt.subplot(2,2,1)
plt.imshow(Fc, origin='lower', extent=extent)
plt.contour(Fc, zero, linewidths=2, extent=extent)
plt.subplot(2,2,2)
plt.imshow(Fnanifbig, origin='lower', extent=extent)
plt.contour(Fc, zero, linewidths=2, extent=extent)
plt.subplot(2,2,3)
plt.imshow(Fnan, origin='lower', extent=extent)
plt.contour(Fc, zero, linewidths=2, extent=extent)
plt.subplot(2,2,4)
plt.plot(x, F[0,:])
plt.show()
非常感谢您的帮助!
@Joe Kington 提供了包含答案的评论。请求的代码在 C 中,可以在 https://github.com/matplotlib/matplotlib/blob/master/src/cntr.c
找到