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

ric*_*ron 6 python matplotlib matplotlib-basemap cartopy

当在底图投影(或 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()
Run Code Online (Sandbox Code Playgroud)

输出显示出现奇怪的行:

在此输入图像描述

如果我设置 alpha=1,线条就会消失并且行为符合预期:

在此输入图像描述

关于如何让 pcolormesh 使用非零 alpha 值有什么想法吗?

Wil*_*ler 5

使用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()
Run Code Online (Sandbox Code Playgroud)

mpl_toolkits.basemap这也应该适用。

在此输入图像描述

颜色条中的线条是由未决问题 #1188引起的,据我所知,没有已知的解决方法不涉及手动创建颜色条。