【问题标题】:Missing levels in python contour plotpython等高线图中缺少水平
【发布时间】:2016-10-07 17:00:17
【问题描述】:

我正在尝试使用指定级别的模拟速度场绘制轮廓,我的值在 [75,150] 的范围内,并且我指定我的级别为 levels=[75,95,115,135,150],但它只给了我 95,115,135 行。我检查了我的二维数组,我确实有值 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()

然后我得到了这个:

【问题讨论】:

  • 我想知道为什么你的代码对我不起作用.. 然后我想起了我 switched to Python 3.. 嘘。 (虽然很容易解决 - 感谢您提供了一个很好的例子!)
  • 您是否收到任何 RuntimeWarning“在 true_divide 中遇到无效值”?不确定这是否相关或可能是另一个 Python3 差异。
  • 我在计算 vel 时遇到错误 /usr/bin/ipython2:3: RuntimeWarning: invalid value encountered in divide。这是因为vel[100,100] == np.nan

标签: python matplotlib contour


【解决方案1】:

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

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

【讨论】:

  • 哦,这是否意味着数组中永远不会存在具有最大值和最小值的轮廓,因为未定义这些值之外的内容?
  • @RaynDrop 是的,轮廓没有画出来,因为另一边没有值(小于75,大于150)。
  • 谢谢!我想我当时不了解轮廓。
猜你喜欢
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多