Python matplotlib.pyplot.contour有问题吗

Python matplotlib.pyplot.contour有问题吗,python,matplotlib,Python,Matplotlib,我用matplotlib.pyplot.contour画了一条线,但结果很奇怪。 我的python代码: import numpy as np from matplotlib import pyplot as plt N = 1000 E = np.linspace(-5,0,N) V = np.linspace(0, 70,N) E, V = np.meshgrid(E, V) L = np.sqrt(-E) R = -np.sqrt(E+V)/np.tan(np.sqrt(E+V))

我用
matplotlib.pyplot.contour
画了一条线,但结果很奇怪。
我的python代码:

import numpy as np
from matplotlib import pyplot as plt

N = 1000

E = np.linspace(-5,0,N)
V = np.linspace(0, 70,N)
E, V = np.meshgrid(E, V)

L = np.sqrt(-E)
R = -np.sqrt(E+V)/np.tan(np.sqrt(E+V))

plt.contour(V, E,(L-R),levels=[0])
plt.show()
结果是:

但是当我使用Mathematica时,结果是不同的。
Mathematica代码是:

ContourPlot[Sqrt[-en] == -Sqrt[en + V]/Tan[Sqrt[en + V]], {V, 0, 70}, {en, -5, 0}]
结果是:

我想要的结果是Mathematica的结果

为什么
matplotlib.pyplot.contour
给出了错误的结果?我很困惑


如果你能给我一些建议,我将不胜感激!多谢各位

matplotlib.pyplot.contour给出的结果在数值上是正确的,但在数学上是错误的

检查如果简单地绘制
tan(x)

你会在电线杆上得到一条线。这是因为后续点是连接的

对于大于某个数字的点,可以使用
np.inf
来避免这种情况。例如加入

y[np.abs(y)> 200] = np.inf
会导致

同样的方法也可用于轮廓

import numpy as np
from matplotlib import pyplot as plt

N = 1000

x = np.linspace(0, 70,N)
y = np.linspace(-5,0,N)
X,Y = np.meshgrid(x, y)

F = np.sqrt(-Y) + np.sqrt(Y+X)/np.tan(np.sqrt(Y+X))
F[np.abs(F) > 200] = np.inf

plt.contour(X, Y, F, levels=[0])
plt.show()

您是否尝试过不使用轮廓的可选参数?这些可能导致这些问题
import numpy as np
from matplotlib import pyplot as plt

N = 1000

x = np.linspace(0, 70,N)
y = np.linspace(-5,0,N)
X,Y = np.meshgrid(x, y)

F = np.sqrt(-Y) + np.sqrt(Y+X)/np.tan(np.sqrt(Y+X))
F[np.abs(F) > 200] = np.inf

plt.contour(X, Y, F, levels=[0])
plt.show()