基于Matplotlib中的像素值设置透明度

我正试图用matplotlib为我正在写的一篇论文绘制一些图形

正在工作。我在2D numpy数组中有两组数据:ascii hillshade

我可以愉快地绘制和调整的光栅:

import matplotlib.pyplot as pp

import numpy as np

hillshade = np.genfromtxt('hs.asc', delimiter=' ', skip_header=6)[:,:-1]

pp.imshow(hillshade, vmin=0, vmax=255)

pp.gray()

pp.show()

它给出:

以及第二个ascii光栅,用于描绘河流流动的特性

穿过风景。该数据可按上述相同方式绘制,

但是,数组中与河网不对应的值是

未分配数据值-9999。目的是设置无数据值

以使河流值覆盖在山体阴影上。

这是河流数据,理想情况下,这里表示为0的每个像素都是

完全透明。

在这方面做了一些研究之后,我似乎可以转换我的数据了

并将alpha值设置为只生成不需要的单元格

透明的。但是,river数组中的值是浮点数,不能为空

转换(因为原始值是图形的整个点)和

如果使用

RGBA格式。

有没有办法绕过这个限制?我希望我能简单地创造一个

像素值和alpha值的元组,然后像那样绘制它们,但是

这似乎不可能。

我还玩过“PIL”,试图创建一个关于这条河的PNG文件

并没有数据值的数据是透明的,但这似乎是自动的

将像素值缩放到0-255,从而丢失需要保留的值。

我欢迎任何人对这个问题有任何见解。

回答:

只是

面罩

你的“河”阵。

e.g.

rivers = np.ma.masked_where(rivers == 0, rivers)

As a quick example of overlaying two plots in this manner:

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.cm as cm

# Generate some data...

gray_data = np.arange(10000).reshape(100, 100)

masked_data = np.random.random((100,100))

masked_data = np.ma.masked_where(masked_data < 0.9, masked_data)

# Overlay the two images

fig, ax = plt.subplots()

ax.imshow(gray_data, cmap=cm.gray)

ax.imshow(masked_data, cmap=cm.jet, interpolation='none')

plt.show()

另外,另一方面,imshow很乐意接受RGBA格式的float。

它只希望所有内容都在0到1之间。

以上是 基于Matplotlib中的像素值设置透明度 的全部内容, 来源链接: utcz.com/qa/418413.html

回到顶部