在matplotlib图中从数据数组设置散点透明度

2 投票
3 回答
11715 浏览
提问于 2025-05-01 13:56

我正在使用matplotlib绘制数据,从两个numpy数组中得到了一个散点图:

ax1.scatter(p_100,tgw_e100,color='m',s=10,label="time 0")

我想为每个点添加关于偏心率的信息。为此,我有一个与

p_100

tgw_e100

长度相同的第三个数组,叫做

ecc_100

,这个数组的值范围从0到1。

所以我想用

ecc_100

中的数据来设置我的点的透明度,创建一种阴影效果。

我试过这样做:

ax1.scatter(p_100,tgw_e100,color='m',alpha = ecc_100,s=10,label="time 0")

但是我遇到了这个错误:

ValueError: setting an array element with a sequence.
暂无标签

3 个回答

0

这里是一个使用透明度的散点图,展示了三列数据。

x = sample_df['feature_1']
y = sample_df['feature_2']
#e = {'label_x': 'b', 'label_y': 'r'}
# label_x will be in red, label_y will be in blue
e = {'label_x': np.asarray((1, 0, 0, .1)), 'label_y': np.asarray((0, 0, 1, .1))} 
colr = sample_df['label_bc'].map(e)
plt.scatter(x, y, c=colr);
8

根据文档,alpha只能是一个单一的数值。

所以我想不出其他办法,只能一个一个地处理你的每个点。

for x, y, a in zip(p_100, tgw_e100, ecc_100):
    ax1.scatter(x, y, color='m',alpha = a, s=10)

不过,我觉得这样标记会有点奇怪,所以你可能需要手动创建图例。我在我的解决方案中省略了这部分。

我想如果能让alpha这个参数像cs那样接受数组,那就太好了。

更新于2015年5月6日 根据这个问题,让alpha接受数组的想法是行不通的。这个错误报告建议通过RGBA数组来设置颜色,以控制alpha值。听起来比我建议的一个一个点绘制要好。

c = np.asarray([(0, 0, 1, a) for a in alpha])
scatter(x, y, color=c, edgecolors=c)
2

另一个选择是使用 cmap 参数来提供一个颜色映射表,同时用 c 参数来设置颜色的深浅程度。你可以查看这个问题: matplotlib 散点图的颜色条

这里有所有的 matplotlib 颜色映射表: http://matplotlib.org/examples/color/colormaps_reference.html 我建议使用像 PuRd 这样的顺序颜色映射表。如果颜色在相反的方向变得更深,你可以通过在名称后面加上 _r 来使用“反向”的颜色映射表,比如 PuRd_r

试试这个:

ax1.scatter(p_100, tgw_e100, c=ecc_100, cmap='PuRd', s=10, label='time 0')

希望这对你有帮助!

撰写回答