Python 以页数显示光栅数据(不处理数据值)。

Python 以页数显示光栅数据(不处理数据值)。,python,matplotlib,raster,folium,Python,Matplotlib,Raster,Folium,我正在尝试使用folium显示光栅类型的数据(numpy数组)。这就是我目前所拥有的 import folium from folium.plugins import ImageOverlay import numpy as np from matplotlib import cm z = np.random.rand(100, 100) m = folium.Map([30, -80], zoom_start=6, tiles='stamentoner') folium.plugins.Im

我正在尝试使用folium显示光栅类型的数据(numpy数组)。这就是我目前所拥有的

import folium
from folium.plugins import ImageOverlay
import numpy as np
from matplotlib import cm

z = np.random.rand(100, 100)
m = folium.Map([30, -80], zoom_start=6, tiles='stamentoner')
folium.plugins.ImageOverlay(
    image=z,
    name='sample map',
    opacity=1,
    bounds=[[25, -75.], [35., -85.]],
    interactive=False,
    cross_origin=False,
    zindex=1,
    colormap=cm.viridis
).add_to(m)
folium.LayerControl().add_to(m)
m.save('sample.html')
我现在想做的是不给z的某些值指定颜色;e、 g.z<0.9。我试过:

z = np.where(z < 0.9, np.nan, z)
z=np.其中(z<0.9,np.nan,z)

但它没有起作用。nan细胞仍然有颜色

我认为在导入到传单之前,可以尝试将要屏蔽的值转换为0(或其他nodata值)。 将此值设置为光栅中的nodata。 将图像保存到PNG。
然后导入传单。

可能不是最好的方法,但我有一个解决方案,无需先将其保存为PNG

我假设您有一个带有一些值的NumPy数组。在我的例子中,这个数组是
img
,它是一个2D数组,有七个不同的值
[0,1,2,3,4,5,-128]
。这是一个分类光栅地图,所以我使用定性颜色

以下是如何添加光栅层:

folium.graster\u layers.ImageOverlay(img,
不透明度=1,
界限=界限,
colormap=lambda x:graster_to_coloridx[x])。将_添加到(m)
现在这里的关键是(如folium文档中所述)
colormap
参数也可以采用RGBA值。RGBA的A是颜色的alpha,用人类的术语来说是不透明度。简单地说,如果你将任何颜色的alpha值设置为0,你就会得到一个透明的颜色,这就是你想要的

我的情况更简单,因为我使用的是定性颜色,我所要做的就是巧妙地定义字典
graster\u to\u coloridx[x]
。我是这样做的:

{0:(0.8941176470588236,0.10196078431372549,0.10980392156862745,1.0),
1: (0.21568627450980393, 0.49411764705882355, 0.7215686274509804, 1.0),
2: (0.30196078431372547, 0.6862745098039216, 0.2901960784313726, 1.0),
3: (0.596078431372549, 0.3058823529411765, 0.6392156862745098, 1.0),
4: (1.0, 1.0, 0.2, 1.0),
5: (0.6509803921568628, 0.33725490196078434, 0.1568627450980392, 1.0),
-128: (1, 1, 1, 0)}
显然,-128是填充值,而其他人的alpha值为1.0,则为0。您可以做的是,不传递cmap,而是传递一个几乎是带有扭曲的cmap的函数:

将matplotlib.cm导入为cm
def get_颜色(x):
小数=2
x=np.左右(x,小数=小数)
ls=np.linspace(0,1,10**decimals+1)

如果为0,则colormap使用特定颜色表示错误值。你试过cm.viridis.set_bad(alpha=0)`吗?谢谢。它不起作用。当使用plt.imshow显示z时,它可以工作,但使用folium时没有成功。@D_Serg…我认为您提到的上述解决方案适用于单波段图像。我想知道,如果我有一个多波段的图像,我想把一个RGB图像打印到一张折页图上,那么在你上面的代码中需要做什么改变。。。。