gpt4 book ai didi

python - 在 plt.contourf 中使用非线性级别时保持颜色图的线性颜色

转载 作者:太空宇宙 更新时间:2023-11-04 02:43:13 26 4
gpt4 key购买 nike

在下面的示例中,我想手动将 contourf 图的 levels 设置为某个变量的分位数(以增强可视化)。

但是给 levels 也会影响 colormap 颜色的缩放比例(看看红色是如何扩展的 -> 视觉印象不受影响):如何我让它们保持线性?

换句话说,我怎样才能使颜色栏的颜色与顶部子图中的颜色保持一致,但与底部子图中的值相对应?

import matplotlib.pyplot as plt
import numpy as np

xvec = np.linspace(-10.,10.,100)
x,y = np.meshgrid(xvec, xvec)
z = -(x**2 + y**2)**2

fig, (ax0, ax1) = plt.subplots(2)
p0 = ax0.contourf(x, y, z, 100)
fig.colorbar(p0, ax=ax0)
p1 = ax1.contourf(x, y, z, 100, levels=np.percentile(z, np.linspace(0,100,101)))
fig.colorbar(p1, ax=ax1)

plt.show()

enter image description here

我是否错过了一些简单的解决方案(我打赌是的),或者我应该尝试做一些 matplotlib.colors.LinearSegmentedColormap 操作...?!

最佳答案

您可以使用 matplotlib.colors.BoundaryNorm 来指定用于颜色映射的级别。

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

xvec = np.linspace(-10.,10.,100)
x,y = np.meshgrid(xvec, xvec)
z = -(x**2 + y**2)**2

fig, (ax0, ax1) = plt.subplots(2)
p0 = ax0.contourf(x, y, z, 100)
fig.colorbar(p0, ax=ax0)

levels = np.percentile(z, np.linspace(0,100,101))
norm = matplotlib.colors.BoundaryNorm(levels,256)
p1 = ax1.contourf(x, y, z, 100, levels=levels, norm=norm)
fig.colorbar(p1, ax=ax1)

plt.show()

enter image description here

关于python - 在 plt.contourf 中使用非线性级别时保持颜色图的线性颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45861213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com