Python matplotlib pcolormesh伪影

Python matplotlib pcolormesh伪影,python,numpy,matplotlib,Python,Numpy,Matplotlib,我用以下格式描述了地球上的网格: 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.a

我用以下格式描述了地球上的网格:

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处的伪影之外,一切正常

我已经用
tourtf
绘制了相同的数据,以确保它不在数据中,并且伪影消失了,但我想使用

我发现了这个相关问题,但无法从中找到解决方案:

在@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')
data=np.loadtxt('surface.txt',dtype=str)
lons=data.T[0].aType(浮点型)
#重新排列数据,使小于180的LON优先于较大的LON
数据=np.hstack((数据[lons=180].T))
lons、lats、grads=数据
lons=lons.aType(浮动)。重塑(715252)
lats=lats.astype(浮动)。重塑(715252)
梯度[grads=='NA']=np.nan
渐变=渐变.aType(浮动).重塑(715252)
grads=硕士学位,其中(np.isnan(grads),grads)
图=plt.图()
ax=plt.gca()
im=最大pcolormesh(lons、lats、grads)
打印颜色条(im)
产品名称(“pcolormesh”)

你能把数据切成更小的矩形吗?你的问题是纬度和经度是循环的,你的最大经度值是环绕的。同样值得注意的是,在这种情况下,
ax.pcolormesh(lons,lats,grads)
ax.pcolormesh(lons,lats,grads[:-1,:-1])是一样的,即,您的数据的最后一行和最后一列正在discarded@Eric关于“你的问题是纬度和经度是循环的”,你是对的,但我仍然不知道如何使用这些信息来解决这个问题。你的x坐标看起来像
[-30,0,30,…,240,270,-60]
(例如)。那个红色框是
pcolor
270
-60
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')