我正在尝试对潮汐盆地的流量使用模型输出。该模型使用曲线网格。我的第一个任务是绘制最高水层速度的一个分量。基于这个问题,我写了一些代码,名为:Matplotlib Streamplot for Unevenly(curvelinear)Grid。

据我所知,与前面提到的问题相比,除了数字之外,我没有做任何其他必要的更改,但是数字仍然是空的。我把代码和一些数字放在下面。

import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

Lat = np.array([[ 30.40098833,  30.40103752,  30.40108727,  30.40113704],
 [ 30.40140046,  30.40145021,  30.40149997,  30.40154973],
 [ 30.40186559,  30.40191478,  30.40196453,  30.4020143 ],
 [ 30.40239781,  30.402447,    30.40249676,  30.40254652]])

Lon = np.array([[-86.51729818, -86.51794126, -86.5185871,  -86.51923603],
 [-86.51725858, -86.51790149, -86.51854717, -86.51919595],
 [-86.51721383, -86.51785659, -86.51850228, -86.51915089],
 [-86.51716242, -86.51780518, -86.51845087, -86.51909948]])

Xvel = np.array([[ 0.0325774,  -0.02811189, -0.04972513, -0.07736091],
 [ 0.00592685, -0.00043959, -0.00735147, -0.05015078],
 [-0.03365543, -0.03183309, -0.03701356, -0.07232581],
 [-0.09578606, -0.10139448, -0.11220678, -0.13221299]])


plt.ion()
fig,(ax1) = plt.subplots(1,1)

m = Basemap(llcrnrlon=Lon.min(),llcrnrlat=Lat.min(),
urcrnrlon=Lon.max(), urcrnrlat=Lat.max(),
projection='merc',resolution='i',ax=ax1)

m.contourf(Lat,Lon,Xvel,latlon=True)
m.drawcoastlines()
m.drawrivers()
m.plot(Lat,Lon,'-k',alpha=0.3,latlon=True)
m.plot(Lat.T,Lon.T,'-k',alpha=0.3,latlon=True)


有人能告诉我是什么导致地块空了吗?

关于底图的使用,我还有另一个问题:我的数据表还包含很多NaN(没有信息的栅格点)。我想知道如何让Basemap知道我在这些位置上没有任何信息,并且我不希望在此处进行任何绘图。在当前代码中,这会导致“ LinearRing的点未形成闭合的线串”错误。

最佳答案

关于问题的第二部分(由于Ajean似乎已经解决了上半部分),告诉Matplotlib(因此也使Basemap)不绘制数据的标准方法是创建一个掩码数组。假设您的Xvel包含NaN,然后​​将其绘制出来

import numpy.ma as ma
m.contourf(Lon, Lat, ma.masked_invalid(Xvel), latlon=True)


顾名思义,函数ma.masked_invalid会屏蔽所有无效(即NaN)值,因此不会绘制它们。

关于python - 带 basemap 的空图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32143218/

10-12 17:04