Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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 使用非零alpha值时,basemap中的pcolormesh上会出现奇怪的线条_Python_Matplotlib_Matplotlib Basemap_Cartopy - Fatal编程技术网

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

Python 使用非零alpha值时,basemap中的pcolormesh上会出现奇怪的线条,python,matplotlib,matplotlib-basemap,cartopy,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

在底图投影(或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()
输出显示出现奇怪的线条:

如果我改为将alpha设置为1,则线条将消失,行为与预期一致:


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

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

例子
将numpy导入为np
将matplotlib.pyplot作为plt导入
lons,lats=np.meshgrid(np.arange(-180180),np.arange(90,-90,-1))
im=plt.pcolor(lons、lats、lons、cmap='RdBu',alpha=0.5,snap=True)
cbar=plt.色条(im)
cbar.set_α(0.5)
plt.show()
这也应该适用于


颜色栏中的线条是由以下原因引起的,据我所知,没有一种解决方法不涉及手动创建颜色栏。

因为它是一个全局贴图,所以我使用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()


然而,色条仍然存在问题

我复制了你上面的图形(尽管颜色栏上仍然有奇怪的线条)。然而,当使用basemap或cartopy时,我仍然会得到奇怪的线条。因此,在使用曲线投影(如robinson投影)时,这似乎仍然是一个问题。在脚本中使用以下行仍然会出现奇怪的行:导入cartopy.crs作为ccrs u____; ax=plt.axs(projection=ccrs.robinson())______; im=ax.pcolor(lons,lats,lons,transform=ccrs.platecaree(),cmap=RdBu',',α=0.5,snap=True)我怎样才能用正确的alpha值手动创建颜色条?@ricitron抱歉,您将使用曲线投影
pcolor
pcolormesh
在这两个方面都是不够的,您必须
imshow
我相信正如我在回答中提到的那样,色条的问题需要解决,没有一个现有的解决办法,无法完全手动处理色条的创建。Matplotlib无法正确处理colorbar的alpha有没有手动创建所需colorbar的示例?i、 例如,使用matplotlib颜色比例,并将颜色条的alpha设置为0.5