Matplotlib散点图中的对数色条

95

我希望能够使散点图上的点颜色与空隙分数的值相对应,但在对数尺度下放大差异。 我已经实现了此功能,但现在当我执行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')

谢谢你的帮助。

1个回答

130

现在文档中有一节描述颜色映射和规范化的工作原理

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进行转换,而不是自己操作。


23
结果见图2。http://pubs.rsc.org/en/content/articlehtml/2014/cp/c3cp55039g 我在致谢中加入了Stack Overflow! - Cokes
1
非常感谢!如果文档能够提示在哪里搜索的话,那就太好了。有这么多出色的函数,带着精彩的参数,提供了精彩的可能性,但是却没有关于如何使用它们的说明。 - EndsOfInvention
2
请根据您现在理解的内容,建议对文档进行编辑。 - tacaswell
更简单的方法是,您可以直接传递 norm="log" - Gregor Gajič

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接