【问题标题】:How to redefine a color for a specific value in a matplotlib colormap如何为 matplotlib 颜色图中的特定值重新定义颜色
【发布时间】:2013-05-06 13:52:42
【问题描述】:

我想在使用imshow 的图像中使用颜色映射rainbow。它工作得很好,但我想重新定义值0 的颜色。我想用白色代替紫罗兰色。

我只想对零值执行此操作,所有其他值都可以保留颜色图中的默认值。

知道如何无需手动编辑颜色图吗?

【问题讨论】:

  • 问题不一样,我不想直接编辑阵营...彩虹色图的定义不明确
  • 您根本不必编辑斜坡,我的意思是创建一个带有零掩码的掩码数组并使用cmap.set_bad('white')。但解决方法与使用下面的cmap.set_under() 相当。

标签: python matplotlib color-mapping


【解决方案1】:

你也可以使用set_under,我认为这比使用set_bad更具语义意义

my_cmap = matplotlib.cm.get_cmap('rainbow')
my_cmap.set_under('w')
imshow(np.arange(25).reshape(5, 5),
       interpolation='none',
       cmap=my_cmap,
       vmin=.001)

您可以使用 kwarg extend 调整颜色条以显示“下方”(和对称的“上方”)颜色,请参阅 exampledocs

有关更完整示例的重复答案,请参阅How to create matplotlib colormap that treats one value specially?

【讨论】:

  • 就像一个魅力!谢谢。唯一的问题是颜色条不会显示白色,但这不是一个大问题....
  • 使用set_underset_overset_bad 修改cmap 后,cmap 将被修改。即使使用matplotlib.cm.get_cmap 再次检索,原始的cmap 仍然被修改。如何回到原来的状态?或者如何在不改变原始cmap的情况下创建一个新的来修改?
  • cmap = copy.deepcopy(cm.get_cmap(...))。它在 2.1 中无需深拷贝即可工作。
  • 因此,对于低于 2.1 的 mpl 版本,除非手动重置原始状态,否则无法在 set_underset_overset_bad 之后将 cmap 恢复为原始状态颜色?顺便说一句,copy 模块中的 deepcopy 成功了。
  • 我找到了返回cmap的方法,例如viridis 一旦修改了极值,就恢复到原来的状态:mpl.cm.viridis._rgba_under = None; mpl.cm.viridis._set_extremes()
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 2015-08-08
相关资源
最近更新 更多