python等高线图中缺少级别

python等高线图中缺少级别,python,matplotlib,contour,Python,Matplotlib,Contour,我试图用模拟速度场的指定水平绘制等高线,我的值在[75150]的范围内,我将我的水平指定为levels=[75,95115135150],但它只给了我95115135行。我检查了我的2d数组,我确实有值为75和150的点位于直线上,但绘图没有显示它们。我想知道为什么会是这样。谢谢!! 这是我的密码: import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Ellipse #some pa

我试图用模拟速度场的指定水平绘制等高线,我的值在[75150]的范围内,我将我的水平指定为
levels=[75,95115135150]
,但它只给了我95115135行。我检查了我的2d数组,我确实有值为75和150的点位于直线上,但绘图没有显示它们。我想知道为什么会是这样。谢谢!! 这是我的密码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

#some parameters...does not matter 
i=60*np.pi/180 #inclination
r=100 #radius
vc=150
vr=0

x=np.arange(-100,100,1)
y=np.arange(-100,100,1)

xx,yy=np.meshgrid(x,y)

#simulate velocity fields....does not matter either
def projv((x, y),v_c, v_r, inc):
   projvy = v_c*x*np.cos(inc)/np.sqrt(x**2+y**2) + v_r*y*np.cos(inc)/np.sqrt(x**2+y**2)
   projvx = v_c*y/np.sqrt(x**2+y**2) + v_r*x/np.sqrt(x**2+y**2)
   v = np.sqrt(projvx**2 + projvy**2)
   return v.ravel()

 #here is my 2d array
 vel = projv((xx,yy),vc, vr, i).reshape(200,200)

#levels I specified
levels=[75,95,115,135,150]
cs=plt.contour(x,y,vel,levels)
plt.clabel(cs,inline=1,fontsize=9)
plt.show()

然后我发现:

您缺少75和150等高线,因为这些值在数组中从未交叉。值150存在,值75(.0000000000000 14)存在,但它们是最小值和最大值。等高线描述线/面边界

#levels modified
levels=[76,95,115,135,149]
cs=plt.contour(x,y,vel,levels)
plt.clabel(cs,inline=1,fontsize=9)

我想知道为什么你的代码对我不起作用。。然后我想起我。。喝倒采(不过这是一个简单的修复方法-感谢您提供了一个很好的示例!)您是否收到任何运行时警告“在true_divide中遇到无效值”?不确定这是否与Python3的另一个差异相关或可能存在差异。我得到错误
/usr/bin/ipython2:3:运行时警告:在计算
vel
的行上的divide
中遇到无效值。这是因为
vel[100100]==np.nan
Oh那么这是否意味着数组中永远不会有最大值和最小值的轮廓,因为超出这些值的部分没有定义?@RaynDrop是的,轮廓没有绘制,因为另一侧没有值(小于75,大于150)。谢谢!我想当时我还不了解轮廓。