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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (56)

我试图用matplotlib来为我正在做的一篇论文绘制一些数字。我在2D Numpy数组中有两组数据:一个Ascii山坡光栅,我可以愉快地用它来绘制和调整:

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()

这意味着:

在对此做了一些研究之后,我似乎能够将数据转换为RGBA数组,并将alpha值设置为只使不需要的单元透明。

有什么办法可以绕过这个限制吗?

提问于
用户回答回答于

例如:

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

作为以这种方式覆盖两个地块的一个快速例子:

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格式的浮动。它只是期望一切都在0到1之间。

用户回答回答于

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))

my_cmap = cm.jet
my_cmap.set_under('k', alpha=0)


# Overlay the two images
fig, ax = plt.subplots()
ax.imshow(gray_data, cmap=cm.gray)
im = ax.imshow(masked_data, cmap=my_cmap, 
          interpolation='none', 
          clim=[0.9, 1])
plt.show()

扫码关注云+社区