使用非零alpha值时,奇怪的线条出现在底图中的pcolormesh上

问题描述 投票:2回答:2

[在底图投影(或Cartopy投影)上使用pcolormesh绘制数据时,我注意到将alpha值设置为小于1时会出现奇怪的线条。

示例代码:

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt

plt.clf()

dpp =1 # degrees per pixel
lons = np.arange(-180,180+dpp,dpp)
lats = -1*np.arange(-90,90+dpp,dpp)

m = Basemap(projection='robin',lon_0=0)
data = np.random.random((np.size(lats), np.size(lons)))
lons, lats = np.meshgrid(lons, lats)
x, y = m(lons, lats)

im = m.pcolormesh(x, y, x, latlon=False, cmap='RdBu')
#im = m.pcolormesh(lons, lats, data, latlon=True, cmap='RdBu')

m.colorbar(im)
plt.show()

输出显示出现奇怪的行:

enter image description here

如果我改为将alpha设置为1,则行消失,并且行为符合预期:

enter image description here

关于如何使pcolormesh与非零的alpha值一起使用的任何想法?

python matplotlib matplotlib-basemap cartopy
2个回答
1
投票

使用pcolor而不是pcolormesh,它速度稍慢,但在处理光栅化输出方面做得更好。确保设置snap = True,这将使网格与像素对齐。

示例

import numpy as np
import matplotlib.pyplot as plt

lons, lats = np.meshgrid(np.arange(-180,180), np.arange(90,-90,-1))

im = plt.pcolor(lons, lats, lons, cmap='RdBu', alpha=0.5, snap=True)

cbar = plt.colorbar(im)
cbar.set_alpha(0.5)
plt.show()

这也应与mpl_toolkits.basemap一起使用。

mpl_toolkits.basemap

据我所知,在颜色栏中的线条是由enter image description here引起的,据我所知,没有解决方法不涉及手动创建颜色栏。


0
投票

因为它是全局地图,所以我可以使用imshow而不是pcolor或pcolormesh来使它起作用:

open issue #1188

import numpy as np import matplotlib.pyplot as plt import cartopy.crs as ccrs plt.clf() lons, lats = np.meshgrid(np.arange(-180,180), np.arange(90,-90,-1)) im = ax.imshow(lons, transform=ccrs.PlateCarree(),cmap='RdBu', alpha=0.5, extent=[-180,180,-90,90]) cbar = plt.colorbar(im) cbar.set_alpha(0.5) plt.show()

但是,颜色栏仍然存在问题。

© www.soinside.com 2019 - 2024. All rights reserved.