【问题标题】:Matplotlib, Log color scale on plot but linear colour scale on colorbar legendMatplotlib,绘图上的日志色标,但颜色条图例上的线性色标
【发布时间】:2014-12-10 10:58:29
【问题描述】:

我想以对数比例绘制,我已经使用了:

plt.contourf(cube[0,:,:].data, levels=np.arange(0,6000,10), norm=mplc.LogNorm())

但是我希望颜色条仍然是线性比例...这可能吗?如果可以,我该怎么做? norm 关键字在plt.colorbar() 命令中似乎无效。

【问题讨论】:

  • 我确信有更直接的方法,但一个技巧是制作第二张看不见的图像,不进行对数缩放,并将颜色条连接到该图像。

标签: python matplotlib legend contour colorbar


【解决方案1】:

this answer on how to generate a colormap without an image。一个工作示例:

import matplotlib.pyplot as plt
import matplotlib.colors as mplc
import numpy as np
data = np.random.random((10,10))*6e3
my_cmap = plt.cm.coolwarm

# contour plot
plt.contourf(data, levels=np.arange(0,6000,10), cmap=my_cmap, norm=mplc.LogNorm())

# colorbar
sm = plt.cm.ScalarMappable(cmap=my_cmap, norm=plt.Normalize(vmin=0, vmax=6000))
sm._A = []
plt.colorbar(sm)

【讨论】:

  • 这个方案乍看之下是对的,但有一个大问题:彩条上的抽动与图像中的值不再对应。我将这项技术的作用与我的数据进行了比较,现在我有两个相同数据的图。一张用对数颜色图绘制,一张用线性颜色图绘制。图中的像素具有不同的颜色,但颜色条是相同的。这意味着颜色条上的数字不显示颜色在图中表示的实际值。
猜你喜欢
  • 1970-01-01
  • 2021-09-02
  • 2013-09-08
  • 1970-01-01
  • 2012-08-15
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多