当使用非零alpha值时,基图中的pcolormesh上会出现奇怪的线

2024-04-20 11:03:29 发布

您现在位置:Python中文网/ 问答频道 /正文

当在底图投影(或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值有什么想法吗?你知道吗


Tags: importalphadataasnppltrandom投影
2条回答

因为它是一个全局地图,所以我使用imshow来代替pcolor或pcolormesh:

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()

enter image description here

但是,色条仍然存在问题。你知道吗

使用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()

这也应该适用于^{}。你知道吗

enter image description here

colorbar中的行是由open issue #1188引起的,据我所知,没有一种解决方法不涉及手动创建colorbar。你知道吗

相关问题 更多 >