我有a file描述地球上的网格格式:
lon1,lat1,value1
lon2,lat2,value2
...
我编写了以下脚本来绘制它:
import matplotlib.pyplot as plt
import numpy as np
import numpy.ma as ma
lons,lats,grads=np.loadtxt('surface.txt',dtype=str).T
lons=lons.astype(float).reshape(715,252)
lats=lats.astype(float).reshape(715,252)
grads[grads=='NA'] = np.nan
grads=grads.astype(float).reshape(715,252)
grads=ma.masked_where(np.isnan(grads),grads)
fig=plt.figure()
ax=plt.gca()
im=ax.pcolormesh(lons,lats,grads)
plt.colorbar(im)
plt.title('pcolormesh')
除了出现在y=-5
周围的工件外,一切正常。
我已使用contourf
绘制了相同的数据,以确保它不在数据中且工件已消失,但我想使用pcolormesh
进行此操作。
fig=plt.figure()
ax=plt.gca()
im=ax.contourf(lons,lats,grads)
plt.colorbar(im)
plt.title('contourf')
我发现了这个相关的问题,但无法从中找出解决方案: matplotlib pcolormesh creates data artifacts
答案 0 :(得分:0)
在@Eric
的评论之后你的问题是纬度和经度是循环的,你的 最大经度值包围
我已经改变了代码,在绘图之前重新排列经度,以便它们是连续的。
data=np.loadtxt('surface.txt',dtype=str)
lons=data.T[0].astype(float)
#reorder the data so that lons smaller than 180 are before larger ones
data=np.hstack((data[lons<180].T,data[lons>=180].T))
lons,lats,grads=data
lons=lons.astype(float).reshape(715,252)
lats=lats.astype(float).reshape(715,252)
grads[grads=='NA']=np.nan
grads=grads.astype(float).reshape(715,252)
grads=ma.masked_where(np.isnan(grads),grads)
fig=plt.figure()
ax=plt.gca()
im=ax.pcolormesh(lons,lats,grads)
plt.colorbar(im)
plt.title('pcolormesh')