如何解决是否存在从透明到黑色或其他任何颜色的cmap?
我在具有零和一的数据集上使用以下cmap="binary"
。 cmap从白色变为黑色。结果如下图所示:
黑白图:
因为我想将此图与现有图重叠,所以我想保留黑色而使白色透明。
用白色重叠图像:
是否有一个cmap从透明变成黑色?
我正在使用以下代码绘制图形:
plt.pcolor(mp1,cmap="binary",alpha=0.5)
解决方法
定义自己的RGBA色彩图(source)并不难。例如,要定义透明度线性变化的黑色地图:
from matplotlib.colors import ListedColormap
cmap = np.zeros([256,4])
cmap[:,3] = np.linspace(0,1,256)
cmap = ListedColormap(cmap)
用法示例:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
x = 2 * np.pi * np.linspace(-1,100)
z = np.sin(x.reshape(1,-1) + x.reshape(-1,1))
cmap = np.zeros([256,256)
cmap = ListedColormap(cmap)
plt.figure()
plt.pcolormesh(z + 1,cmap='bwr',edgecolors=None)
plt.pcolormesh(np.fliplr(z),cmap=cmap,edgecolors=None)
plt.savefig("temp")
输出:
,找到了解决方案!
c_white = matplotlib.colors.colorConverter.to_rgba('white',alpha = 0)
c_black= matplotlib.colors.colorConverter.to_rgba('black',alpha = 1)
cmap_rb = matplotlib.colors.LinearSegmentedColormap.from_list('rb_cmap',[c_white,c_black],512)
pl = plt.pcolor(mp1,cmap=cmap_rb)
,
如果mp1
仅具有值0和1,且之间没有任何值,则可以屏蔽零并仅绘制零。 np.where(mp1 == 1,np.nan)
仅显示那些。使用vmin=0
将确保0映射到“二进制”颜色图的白色,而vmax=1
将1映射到黑色。
import matplotlib.pyplot as plt
import numpy as np
mp0 = np.random.randn(15,30).cumsum(axis=1).cumsum(axis=0) # random backgroud
mp1 = np.zeros((15,30)) # start with all zeros
mp1[np.random.randint(0,15,30),np.random.randint(0,30,30)] = 1 # set some random positions to 1
plt.pcolormesh(mp0,cmap='rainbow')
plt.pcolormesh(np.where(mp1 == 1,np.nan),cmap='binary',vmin=0,vmax=1)
plt.tight_layout()
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。