【问题标题】:How to change colorbar's color (in some particular value interval)?如何更改颜色条的颜色(在某些特定的值区间内)?
【发布时间】:2017-01-23 12:22:23
【问题描述】:

在 matplotlib 中,我想在某个特定的值区间内更改颜色条的颜色。例如,我想更改地震颜色条,让 -0.5 和 0.5 之间的值变成白色,我该怎么做?

非常感谢

【问题讨论】:

  • 你写过一些可以发布的代码吗?

标签: matplotlib colorbar


【解决方案1】:

您基本上需要创建自己的颜色映射表,以包含您想要的特定功能。当然,这样做时可以使用现有的颜色图。

颜色图始终介于 01 之间。然后,此范围将映射到数据间隔。因此,为了在-0.50.5 之间创建白色,我们需要知道数据的范围——假设数据从-11。然后我们可以决定让地震图的下部(蓝色)从-1-0.5,然后在-0.5+0.5 之间设置白色,最后地震图的上部(红色)从0.51。在颜色图的语言中,这对应于范围[0,0.25][0.25, 0.75][0.75,1]。然后我们可以创建一个列表,前 25% 和最后 25% 是地震图的颜色,中间 50% 是白色。

此列表可用于创建颜色图,使用 matplotlib.colors.LinearSegmentedColormap.from_list("colormapname", listofcolors)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors

n=50
x = 0.5
lower = plt.cm.seismic(np.linspace(0, x, n))
white = plt.cm.seismic(np.ones(100)*0.5)
upper = plt.cm.seismic(np.linspace(1-x, 1, n))
colors = np.vstack((lower, white, upper))
tmap = matplotlib.colors.LinearSegmentedColormap.from_list('terrain_map_white', colors)

x = np.linspace(0,10)
X,Y = np.meshgrid(x,x)
z = np.sin(X) * np.cos(Y*0.4)

fig, ax = plt.subplots()
im = ax.imshow(z, cmap=tmap)    
plt.colorbar(im)

plt.show() 

对于更一般的情况,您可能需要颜色标准化(使用matplotlib.colors.Normalize)。参见例如this example,其中颜色图中的某种颜色始终固定为数据值 0,与数据范围无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2018-12-29
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    相关资源
    最近更新 更多