Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 消除Matplotlib/Basemap pcolor绘图中的白色边_Python_Numpy_Matplotlib_Matplotlib Basemap - Fatal编程技术网

Python 消除Matplotlib/Basemap pcolor绘图中的白色边

Python 消除Matplotlib/Basemap pcolor绘图中的白色边,python,numpy,matplotlib,matplotlib-basemap,Python,Numpy,Matplotlib,Matplotlib Basemap,我正在使用以下代码在地图上绘制数据: import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.cm as cm from mpl_toolkits.basemap import Basemap from matplotlib.patches import Polygon from scipy.io import netcdf ncfile = netcdf.net

我正在使用以下代码在地图上绘制数据:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from scipy.io import netcdf

ncfile = netcdf.netcdf_file(myfile.nc,'r')
lon = ncfile.variables['longitude'][:]
lat = ncfile.variables['latitude'][:]
data = ncfile.variables['mydata'][:]
ncfile.close()

m = Basemap(projection='nplaea', boundinglat=40, lon_0=270)
m.drawcoastlines(linewidth=.6, zorder=2)
m.drawparallels(np.arange(-80.,81.,20.), zorder=1)
m.drawmeridians(np.arange(-180.,181.,20.), zorder=1)
cNorm = mpl.colors.Normalize(vmin=0, vmax=np.nanmax(data))
cmap = plt.get_cmap('jet')
lons, lats = np.meshgrid(lon, lat)
x, y = m(lons, lats)
datamap = m.pcolor(x, y, data, zorder=0)
datamap.set_norm(cNorm) 
plt.colorbar(datamap, cmap=cmap, norm=cNorm, shrink=0.5)
plt.savefig('figures/map_polar.png', dpi=150, bbox_inches='tight', pad_inches=0.4)
这将产生以下图像:


如您所见,网格单元之间存在白色间隙。我怎样才能摆脱它们呢?

我曾经有过同样的问题。问题很可能出在经度上。 确保输入中同时存在
0
360
。如果没有,请手动添加它们,以及
mydata
进行相应的更改,使它们具有相同的形状。

我知道这是一个老问题,但我想我会为这个问题添加我的解决方案。当我遇到与你完全相同的问题时,我发现了你的问题,即我的图中有一条白线,网格从-180到180。我的解决方案是使用Basemap函数


这解决了我的问题。干杯,Trond

在我看来,原来的帖子实际上并没有询问
0
360
度之间的白色区域

我认为OP讨论的是每一个颜色方块之间的线条,这将符合:

似乎将pcolor绘图保存为pdf格式时总是包含网格线,这对于其他输出格式(如png)是不正确的

以下是开发者对这个问题的看法:

我在gs,xpdf Preview.app的结果图像中看到了网格线,但没有 在AdobeReader中。当我放大预览时,线条有点跳跃, 和在屏幕上的宽度始终相同,无论缩放级别如何

本例中绘制的是大量多边形,因此 多边形共享具有完全相同坐标的边。代码填充 每个多边形的内部,显然还有一些渲染算法 在多边形之间留一条最小宽度的线


因此,这是PDF查看器的问题,而不是
pcolor
matplotlib

的任何其他方面。您能将数据文件放在任何地方吗?不幸的是,不能,但它是规则间隔的网格数据。无论如何,我不能使用随机生成(或恒定)的数据重现您的问题。。。您使用的matplotlib版本是什么?也许这是一个已经修复的bug?而且,在这种情况下,
pcolormesh
会更快。尝试使用它而不是
pcolor
。我怀疑(?)它能解决你的问题,但无论如何它应该更快。pcolormesh在极轴投影上工作吗?(projection='nplaea')我使用pcolormesh得到了一个非常奇怪的结果…(一切为零)我使用的范围是-180180。那也应该行吗?实际上,180缺失了,所以我添加了它,并再次将数据的最后一列复制到数据中。然而,白色条纹仍然存在。
from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic
SSTcyclic, lonCMIP5cyclic = addcyclic(SST, lonCMIP5)