繁体   English   中英

matplotlib pcolormesh工件

[英]matplotlib pcolormesh artifact

我有一个文件 ,其格式描述了地球上的网格:

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绘制了相同的数据,以确保它不在数据中并且工件消失了,但是我想使用pcolormeshpcolormesh

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

在此处输入图片说明

我找到了这个相关问题,但无法从中找到解决方案: matplotlib pcolormesh创建数据工件

在@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')

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM