繁体   English   中英

如何在 matplotlib 散点图中标准化颜色图?

[英]How can I normalize colormap in matplotlib scatter plot?

matplotlib 文档详细解释了如何对 pcolormesh 的颜色图进行标准化,但是如何正确地为散点图执行此操作?

normalize = mcolors.Normalize(vmin=-1, vmax=1)
plt.scatter(x,y,z,cmap=colormap(normalize),marker='*',s=5)

不起作用(类型错误TypeError: Cannot cast array data from dtype('O') to dtype('int64') according to the rule 'safe'

只是 z 数据不完全从 -1 到 1,我正在绘制多个数据集,这些数据集的限制在 +/- 0.93 - 98 左右,但我希望颜色以零为中心并从 -1 到 1 所以我对所有各种数据集都有相同的参考。

哦,当我不尝试规范化时,我得到TypeError: scatter() got multiple values for keyword argument 's' 显然我不知道如何在散点图中使用颜色图。

您使用的语法与链接文档中的语法完全不同。 规范化散射或pcolor(网格)或任何其他标量可映射对象之间基本没有区别。

总是如此

colormap = plt.cm.bwr #or any other colormap
normalize = matplotlib.colors.Normalize(vmin=-1, vmax=1)
plt.scatter(x, y, c=z, s=5, cmap=colormap, norm=normalize, marker='*')
# define the range of values in the data (100 is arbitrary)
my_range = np.linspace(-1,1,100)

# cmap is a function. It returns (rgba) colors base on a range 0-1. Therefore, 
# transform your values to 0-1 to use them as input for cmap() 
cmap = cm.get_cmap('viridis', 100)
my_transformed_range = (my_range - np.min(my_range)) / (np.max(my_range) - np.min(my_range))

# colors should be supplied as a single color or a list (here using the cmap fx)
plt.scatter(my_range, np.ones(100), color=[cmap(i) for i in my_transformed_range])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM