python - 具有均匀间隔颜色的颜色条的不均匀(不规则)间隔数据

标签 python matplotlib colorbar

我正在尝试创建一个具有 13 个级别的颜色条,并使用中心值间隔为 0 的发散 RdBu_r 颜色图。目前,我有 an evenly spaced colorbar with values descending by 8 ranging from -48 to +48

我想做的是一个颜色间距均匀但值间距不均匀的颜色条,like this colorbar which I modified in photoshop, such that the values go from [-96.0, -72, -48, -24, -12, -6, 0, 6, 12, 24, 48, 72, 96]

我当前的尝试如下所示:

from cartopy import crs as ccrs;  import matplotlib.pyplot as plt

crs_new = ccrs.PlateCarree()

fig, axs = plt.subplots(subplot_kw={'projection': crs_new},figsize=(8, 6))

cmap = 'RdBu_r'  

uneven_levels = [-96.0, -72, -48, -24, -12, -6, 0, 6, 12, 24, 48, 72, 96]
vmin,vmax = -48,48
cs=plt.pcolormesh(lon,lat, data,cmap=cmap, transform=crs_new,vmin=vmin,vmax=vmax)
cbar=plt.colorbar(cs,boundaries= uneven_levels)

Which results in a colorbar with really dark ends and clearly uses linearly spaced coloring.

使用 countourf 和“间距=统一”不起作用。

使用“colors.DivergingNorm(vmin=vmin, vcenter=0, vmax=vmax)”不起作用。

我尝试用

定义我自己的颜色条
cmap = plt.get_cmap('RdBu_r')
colors = cmap(np.linspace(0, 1, len(uneven_levels)))

但不知道如何让数据与这些级别相匹配,结果与图 3 相同,所以这也不起作用。

非常感谢任何帮助! :)

最佳答案

存在大量深色的原因是 vmin, vmax = -48, 48,它强制 -48 以下的所有值变为最深的蓝色,并且所有值高于 48 至最深的红色。

要获得与contourf类似的效果,matplotlib的from_levels_and_colors可能会有帮助。这会生成一个包含 12 种颜色和一个范数的颜色图。标准是一个函数,它将 -96 到 96 之间的值转换为颜色图的值(由级别定义)。

这里是一些示例代码:

import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
import matplotlib.colors as mcolors

x = np.linspace(0, 3 * np.pi, 500)
data = np.sin(x - x[:, np.newaxis] * 2) * 95
uneven_levels = [-96, -72, -48, -24, -12, -6, 0, 6, 12, 24, 48, 72, 96]
cmap_rb = plt.get_cmap('RdBu_r')
colors = cmap_rb(np.linspace(0, 1, len(uneven_levels) - 1))
cmap, norm = mcolors.from_levels_and_colors(uneven_levels, colors)

fig, axs = plt.subplots(ncols=2, figsize=(8, 6))

v = np.linspace(-96, 96, 1000)
axs[0].plot(v, norm(v))

cs = axs[1].pcolormesh(data, cmap=cmap, norm=norm)
cbar = fig.colorbar(cs, ticks=uneven_levels)

plt.show()

左图显示了边界范数如何以非线性方式将 -96 和 96 之间的值映射到各自的颜色。右侧图像显示带有边界的颜色条。

example plot

关于python - 具有均匀间隔颜色的颜色条的不均匀(不规则)间隔数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61897393/

相关文章:

python - 如何在 Wxpython 中将 wx.LEFT 和 wx.TOP 设置为两个不同的值?

python - 逻辑回归 sklearn - 训练和应用模型

python - 如何检查 'x' 是否在字典值中,如果是则打印关联的字典

python /matplotlib : create graph with changing background colors

matplotlib - 如何让颜色条从暗到亮缩放?

python - 如何调整 Plotly 图例/颜色条背景透明度/颜色

python - 如何将 Tika python 与 Tesseract OCR 绑定(bind)?

python - Matplotlib 图例中的自定义艺术家

python - 更改 Matplotlib 字体而不影响全局

python - 对 matplotlib 中的不同子图使用相同的颜色条