python - 在 plt 之外设置 matplotlib 颜色图的限制

标签 python numpy matplotlib

我目前正在使用 python matplotlib 使用颜色图 cm.jet 将一组特征转换为视觉表示并将它们存储为 numpy.ndarrays.. 问题是我无法根据需要设置 vmin 和 vmax..

我现在正在做的是

Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import matplotlib
>>> from matplotlib import cm
>>> import matplotlib.pyplot as plt
>>> a = np.random.randint(5,size=(3,3))
>>> convert = plt.get_cmap(cm.jet)
>>> numpy_a = convert(a)
>>> numpy_a_limited = convert(a)

问题是 matplotlib 在给定数据集的情况下自动调整颜色范围,这意味着存储的 numpy.ndarray 的像素信息不正确。

我正在尝试修复颜色范围,以便像素信息与原始数据相关。

这是我尝试修复颜色范围的尝试。

convert = plt.get_cmap(cm.jet)
        convert = convert.set_clim(vmin=-6, vmax=2)

给出我的错误消息:

AttributeError: 'LinearSegmentedColormap' object has no attribute 'set_clim'

最佳答案

为了能够使用颜色图,值的范围必须介于 0 和 1 之间。超出此范围的值将被截断,从而导致值的动态范围丢失。

因此,您需要在将数组提供给颜色图之前对其进行标准化。一种选择是使用自定义标准化函数

import matplotlib.pyplot as plt
import numpy as np

a = np.random.randint(5,size=(3,3))
cmap = plt.cm.jet
norm = lambda x: (x+2.)/(6.+2.)
converted_a = cmap(norm(a))

另一个选项是使用内置的 Normalize 实例

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

a = np.random.randint(5,size=(3,3))
cmap = plt.cm.jet
norm = Normalize(vmin=-2, vmax=6)
converted_a = cmap(norm(a))

关于python - 在 plt 之外设置 matplotlib 颜色图的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43550574/

相关文章:

python - 在 python 图中添加额外信息?

python - 图.transFigure.transform() : lines in figure coordinates do not scale with the figure

python - 为什么解包结构会产生元组?

python - 如何在 QTableWidget 中打印数据库中的数据?

python - 简单机器学习模型训练返回Nan

python - 二进制矩阵项

python - 如何使用 imshow 使用 Matplotlib 绘制具有非线性 y 轴的图像?

python ftplib 错误 : Failed to setup connection

python - 在 Django 中使用 URL 将 boolean 值更改为真/假

python - Numpy 随机函数为给定参数创建不一致的形状