Python 如何使用matplotlibs colormap alpha值使三色打印淡入透明?
我想用tripcolor在地图上绘制一个概率分布,并希望在概率为低/零的情况下,分布淡入透明状态。但是tripcolor似乎不接受colormap提供的本地alpha值 我设置了一个自定义颜色映射,从透明(Python 如何使用matplotlibs colormap alpha值使三色打印淡入透明?,python,python-3.x,matplotlib,alpha-transparency,Python,Python 3.x,Matplotlib,Alpha Transparency,我想用tripcolor在地图上绘制一个概率分布,并希望在概率为低/零的情况下,分布淡入透明状态。但是tripcolor似乎不接受colormap提供的本地alpha值 我设置了一个自定义颜色映射,从透明(alpha=0.)白色过渡到蓝色(alpha=1.),如中所述 如果我将其应用于一行,如所述 一切正常 但是,如果我想使用tripcolor绘制分布,它似乎忽略了colormap alpha值 它适用于散点图 下面可以找到一个简单的工作示例 import numpy as np from ma
alpha=0.
)白色过渡到蓝色(alpha=1.
),如中所述
如果我将其应用于一行,如所述
一切正常
但是,如果我想使用tripcolor绘制分布,它似乎忽略了colormap alpha值
它适用于散点图
下面可以找到一个简单的工作示例
import numpy as np
from matplotlib import pyplot as plt, colors, cm
# quick and dirty test data
ext = np.linspace(0., 1., 21)
coords, _ = np.meshgrid(ext, ext)
x = coords.flatten()
y = coords.T.flatten()
vals = 1. - np.sin(coords * np.pi / 2).flatten()
# color dict
cdict = {'red': ((0., 1., 1.),
(1., 0., 0.)),
'green': ((0., 1., 1.),
(1., 0.5, 0.5)),
'blue': ((0., 1., 1.),
(1., 1., 1.)),
'alpha': ((0., 0., 0.),
(1., 1., 1.))}
# colormap from dict
testcmap = colors.LinearSegmentedColormap('test', cdict)
plt.register_cmap(cmap=testcmap)
# plotting
fig, ax = plt.subplots(1)
ax.set_facecolor('black')
ax.tripcolor(x, y, vals, cmap='test')
fig2, ax2 = plt.subplots(1)
ax2.set_facecolor('black')
ax2.scatter(x, y, c=vals, cmap='test')
plt.show()
编辑:
查看地图似乎为三角测量设置了一个全局alpha。复制/粘贴tripcolor功能并省略该行有效。不过,使用matplotlibs内置函数仍然很好
Edit2:
将数据生成函数从cos更改为1-sin,以获得更具启发性的转换。
为了得到一个好的结果,我还使用了
shading='gouraud'
这更接近你想要的吗
ax.tripcolor(x, y, vals, cmap='test', alpha=None)
不知道为什么,但我猜设置
alpha=None
允许每个三角形从颜色贴图中获取alpha颜色。Hmmm。。。当将ext=np.linspace(0,1,21)增加到ext=np.linspace(0,1,200)时,tripcolor看起来一点也不差…@Sosel tripcolor仍然没有向我显示任何透明度。散点图看起来更像tripcolor,是的,但使用散点作为解决方法不是我想要的…由于粒度很细,散点和tripcolor在这里看起来几乎相同,所以我可能只是不完全理解…@Sosel你能看看图中的右边缘吗?对我来说,在三色图中,白色和黑色之间有一个尖锐的跳跃式边界,而散点图则平滑地淡入黑色。这是相当不同的,即使我将粒度增加到200。。。编辑:看来余弦不是表示我想要的行为的最佳选择,请参见更新的问题。正确,对于大多数其他艺术家来说,alpha已经没有了,但是对于tripcolor
它默认为1.0
,因此需要手动将其设置为None
。
ax.tripcolor(x, y, vals, cmap='test', alpha=None)