gpt4 book ai didi

python - 使用 plt.colorbar() 时在 matplotlib 中定义自定义标准化函数

转载 作者:行者123 更新时间:2023-12-01 04:08:18 25 4
gpt4 key购买 nike

要使用 matplotlib 颜色条,必须使用 matplotlib.colors.Normalize 子类中的对象指定一个 matplotlib.cm.ScalarMappable,其中 >colorbar 可以知道如何将数据标准化为[0,1]浮点值。

matplotlib提供的归一化过程只有少数,线性归一化,对数,幂律等。但在实践中,我们可能想使用我们自己编写的其他归一化函数。

我们可以使用任何函数将数据数组标准化为 [0,1],但是如果没有使用 Nomalization 子类构建的 Scalarmappable,颜色条将不会有刻度和标签正确的。

我想知道这是我对 matplotlib colorbar 的理解正确还是有其他方法可以很容易地做到这一点?或者也许我们必须手动编写一个子类来包装自定义规范化函数?

最佳答案

您可以轻松地子类化 matplotlib.colors.Normalize以此目的。这是我为 previous SO question 编写的分段标准化类的示例。 :

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

class PiecewiseNorm(Normalize):
def __init__(self, levels, clip=False):
# input levels
self._levels = np.sort(levels)
# corresponding normalized values between 0 and 1
self._normed = np.linspace(0, 1, len(levels))
Normalize.__init__(self, None, None, clip)

def __call__(self, value, clip=None):
# linearly interpolate to get the normalized value
return np.ma.masked_array(np.interp(value, self._levels, self._normed))

def inverse(self, value):
return 1.0 - self.__call__(value)

例如:

y, x = np.mgrid[0.0:3.0:100j, 0.0:5.0:100j]
H = 50.0 * np.exp( -(x**2 + y**2) / 4.0 )
levels = [0, 1, 2, 3, 6, 9, 20, 50]

H1 = -50.0 * np.exp( -(x**2 + y**2) / 4.0 )
levels1 = [-50, -20, -9, -6, -3, -2, -1, 0]

fig, ax = plt.subplots(2, 2, gridspec_kw={'width_ratios':(20, 1), 'wspace':0.05})

im0 = ax[0, 0].contourf(x, y, H, levels, cmap='jet', norm=PiecewiseNorm(levels))
cb0 = fig.colorbar(im0, cax=ax[0, 1])
im1 = ax[1, 0].contourf(x, y, H1, levels1, cmap='jet', norm=PiecewiseNorm(levels1))
cb1 = fig.colorbar(im1, cax=ax[1, 1])

plt.show()

enter image description here

关于python - 使用 plt.colorbar() 时在 matplotlib 中定义自定义标准化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35295075/

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