如何避免多序列3D散点图的colormap数据被单独归一化
问题解决方法
问题根源
每次调用ax.scatter()绘制单个序列时,若没有显式指定颜色映射的归一化规则,函数会默认使用当前序列颜色值的局部最值做归一化,和你提前定义的全局vmin/vmax无关,这才导致每个序列的颜色被单独拉伸,出现映射错误。
解决方案
在循环调用ax.scatter()时,将你提前定义好的全局归一化规则传入即可,不需要手动提前做归一化处理,两种可选写法:
- 直接传入预先定义的
norm对象 - 显式传入全局的
vmin和vmax参数
核心修改代码
你只需要修改循环内的ax.scatter行即可,修改后如下:
'Plot different series' for i in range(len(l_x)): ax.scatter(l_x[i], l_y[i], l_z[i], marker=markers[i], c=l_cm[i], cmap=cmap, norm=norm)
或者也可以写成:
ax.scatter(l_x[i], l_y[i], l_z[i], marker=markers[i], c=l_cm[i], cmap=cmap, vmin=vmin, vmax=vmax)
修改后三个序列的颜色就会统一按照0~100的全局区间做映射,序列1的最大值50会对应色条中间色,序列2的固定值50也会显示为中间色,不会再被错误映射为最小值。
内容的提问来源于stack exchange,提问作者DaniPclos
相关产品推荐
相关产品推荐

