我想让散点图上点的颜色与空隙率的值相对应,但采用对数刻度以放大差异。我这样做了,但现在当我执行 plt.colorbar() 时,它会显示空隙分数的对数,而我真正想要实际的空隙分数。如何使用属于 [0.00001,1] 的空隙分数的适当标签在颜色条上制作对数刻度?
这是我现在拥有的绘图的图像,但是空洞分数颜色条没有适当标记为对应于真实的空洞分数,而不是它的对数。
fig = plt.figure()
plt.scatter(x,y,edgecolors='none',s=marker_size,c=np.log(void_fraction))
plt.colorbar()
plt.title('Colorbar: void fraction')
感谢您的帮助。
现在文档中有一部分描述了颜色映射和标准化的工作原理
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
进行转换,而不是您自己进行转换。
tacaswell 的答案是完全正确的,但是有一个稍微简单的调用签名来完成同样的事情:你可以简单地传递
norm='log'
。例如:
plt.scatter(x,y,edgecolors='none',s=marker_size,c=void_fraction,norm='log')
这在 docs 中提到了散点图,也适用于其他颜色映射图,例如 pcolormesh。
(我意识到评论中提到了这一点,但我第一次找到这个答案时忽略了该评论。我认为这值得它自己的答案。)