在matplotlib图中从数据数组设置散点透明度
我正在使用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
这个参数像c
和s
那样接受数组,那就太好了。
更新于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')
希望这对你有帮助!