简体   繁体   English

Matplotlib透明覆盖和pdf透明

[英]Matplotlib transparent overlay & pdf transparency

Let's assume I have two numpy arrays (The ones I present are just examples): 假设我有两个numpy数组(我展示的只是示例):

import numpy as np
A = np.arange(144).reshape((12, 12))
np.random.shuffle(A)

B = np.ones((12,12))
B[0:10:4,:] = None

I want to plot A using imshow: 我想使用imshow绘制A

import matplotlib.pyplot as mplt
mplt.imshow(A, cmap = mplt.gray())

and overlay B so that the None areas are fully transparent and the one areas have an alpha of (eg alpha = 0.3.). 并覆盖B,以使“ 无”区域完全透明,并且一个区域的alpha值为(例如alpha = 0.3)。

I already tried using something along the lines of: 我已经尝试过使用以下方式:

mplt.imshow(B, cmap = mplt.get_cmap('Reds), alpha = 0.3)

but that does not work. 但这不起作用。 Also tried to use masked arrays to create B, but cannot get my head around it. 还尝试使用蒙版数组创建B,但无法绕开它。 Any suggestions? 有什么建议么?

Thanks 谢谢

EDIT: 编辑:

I ended up using 我最终使用

my_red_cmap = mplt.cm.Reds
my_red_cmap.set_under(color="white", alpha="0")

which works like a charm (I tested Bill's solution as well, which also works perfectly). 就像魅力一样(我也测试了Bill的解决方案,也很完美)。

If instead of None you use 0's for the transparent colors, you can take your favorite matplotlib colormap and add a transparent color at the beginning of it: 如果您使用0代替透明色而不是None ,则可以采用自己喜欢的matplotlib颜色图,并在其开头添加透明色:

my_red_cmap = mplt.cm.Reds
my_red_cmap.set_under(color="white", alpha="0")

then you can just plot the array B with a global alpha of 0.3 whatever you want, using your custom color map, which will use a transparent white as its first value. 那么您可以使用自定义颜色图(只要使用透明白色作为其第一个值),就可以随心所欲地绘制阵列B的全局alpha值为0.3。

You can do the following: 您可以执行以下操作:

import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt

x = np.arange(100).reshape(10, 10)
y = np.arange(-50, 150, 2).reshape(10, 10)
y[y<x] = -100 # Set bad values

cmap1 = cm.gray
cmap2 = cm.Reds
cmap2.set_under((1, 1, 1, 0))

params = {'interpolation': 'nearest'}
plt.imshow(x, cmap=cmap1, **params)
plt.show()

在此处输入图片说明

plt.imshow(y, cmap=cmap2, **params)
plt.show()

在此处输入图片说明

plt.imshow(x, cmap=cmap1, **params)
plt.imshow(y, cmap=cmap2, vmin=0, **params) # vmin > -100
plt.show()

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM