基于Matplotlib中的像素值设置透明度
我正试图用matplotlib为我正在写的一篇论文绘制一些图形
正在工作。我在2D numpy数组中有两组数据:ascii hillshade
我可以愉快地绘制和调整的光栅:
import matplotlib.pyplot as ppimport 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 npimport 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