matplotlib pcolormesh神器

时间:2016-11-08 11:07:18

标签: python numpy matplotlib

我有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')

enter image description here

除了出现在y=-5周围的工件外,一切正常。

我已使用contourf绘制了相同的数据,以确保它不在数据中且工件已消失,但我想使用pcolormesh进行此操作。

fig=plt.figure()
ax=plt.gca()
im=ax.contourf(lons,lats,grads)
plt.colorbar(im)
plt.title('contourf')

enter image description here

我发现了这个相关的问题,但无法从中找出解决方案:  matplotlib pcolormesh creates data artifacts

1 个答案:

答案 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')

enter image description here