Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用matplotlibs colormap alpha值使三色打印淡入透明?_Python_Python 3.x_Matplotlib_Alpha Transparency - Fatal编程技术网

Python 如何使用matplotlibs 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

我想用tripcolor在地图上绘制一个概率分布,并希望在概率为低/零的情况下,分布淡入透明状态。但是tripcolor似乎不接受colormap提供的本地alpha值

我设置了一个自定义颜色映射,从透明(
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)