matplotlib 散点图中的对数颜色条

问题描述 投票:0回答:2

我想让散点图上点的颜色与空隙率的值相对应,但采用对数刻度以放大差异。我这样做了,但现在当我执行 plt.colorbar() 时,它会显示空隙分数的对数,而我真正想要实际的空隙分数。如何使用属于 [0.00001,1] 的空隙分数的适当标签在颜色条上制作对数刻度?

这是我现在拥有的绘图的图像,但是空洞分数颜色条没有适当标记为对应于真实的空洞分数,而不是它的对数。

current plot

fig = plt.figure()
plt.scatter(x,y,edgecolors='none',s=marker_size,c=np.log(void_fraction))
plt.colorbar()
plt.title('Colorbar: void fraction')

感谢您的帮助。

python matplotlib
2个回答
136
投票

现在文档中有一部分描述了颜色映射和标准化的工作原理

matplotlib
进行颜色映射的方式分为两个步骤,首先是一个
Normalize
函数(由
matplotlib.colors.Normalize
的子类包裹),它将您提交的数据映射到
[0, 1]
。 第二步将值映射到
[0,1]
-> RGBA 空间。

您只需要使用

LogNorm
规范化类,通过
norm
kwarg 传入。

plt.scatter(x,y,edgecolors='none',s=marker_size,c=void_fraction,
                norm=matplotlib.colors.LogNorm())

当您想要缩放/调整数据以进行绘图时,最好让

matplotlib
进行转换,而不是您自己进行转换。


0
投票

tacaswell 的答案是完全正确的,但是有一个稍微简单的调用签名来完成同样的事情:你可以简单地传递

norm='log'
。例如:

plt.scatter(x,y,edgecolors='none',s=marker_size,c=void_fraction,norm='log')

这在 docs 中提到了散点图,也适用于其他颜色映射图,例如 pcolormesh。

(我意识到评论中提到了这一点,但我第一次找到这个答案时忽略了该评论。我认为这值得它自己的答案。)

© www.soinside.com 2019 - 2024. All rights reserved.