Python matplotlib Colormap-规范化许多接近值的范围

Python matplotlib Colormap-规范化许多接近值的范围,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,我有一个由20个值组成的系列,我试图用一个自定义的颜色映射来绘制这些值,但是它会为每个值返回相同的颜色,尽管它们是唯一的。我在更广泛的范围内使用了相同的代码,而且它很有效,似乎数字如此接近才是问题所在 #my array print(combined.values) print(type(combined.values)) [4.58019608 4.4845098 4.4818 4.4288 4.4166 4.40807692 4.3688 4.359

我有一个由20个值组成的系列,我试图用一个自定义的颜色映射来绘制这些值,但是它会为每个值返回相同的颜色,尽管它们是唯一的。我在更广泛的范围内使用了相同的代码,而且它很有效,似乎数字如此接近才是问题所在

#my array
print(combined.values)
print(type(combined.values))

[4.58019608 4.4845098  4.4818     4.4288     4.4166     4.40807692
 4.3688     4.359      4.3446     4.3318     3.6424     3.6306
 3.6248     3.6194     3.617      3.6152     3.5628     3.4948
 3.4424     3.3692    ]
<class 'numpy.ndarray'>

cmap = mcolors.LinearSegmentedColormap.from_list("", ['white', 'black'])
#try to pass values to cmap
print(cmap(combined.values))
[[0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]]
#我的数组
打印(组合值)
打印(类型(组合值))
[4.58019608 4.4845098  4.4818     4.4288     4.4166     4.40807692
4.3688     4.359      4.3446     4.3318     3.6424     3.6306
3.6248     3.6194     3.617      3.6152     3.5628     3.4948
3.4424     3.3692    ]
cmap=mcolors.LinearSegmentedColormap.from_列表(“,[“白色”,“黑色])
#尝试将值传递给cmap
打印(cmap(组合值))
[[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]]

如何规范化颜色贴图的这些值?理想情况下,最小值在开始处,最大值在结束处。

matplotlib colormaps似乎要求传递的值介于0和1之间。将数据数组规格化为介于0和1之间(包括“MinMaxScaling”),似乎会产生(r、g、b、a)值,这些值表示有用的灰度梯度

c = combined.values.copy()
c = (c - c.min()) / (c.max() - c.min())

cmap = mcolors.LinearSegmentedColormap.from_list("", ['white', 'black'])
print(cmap(c))

[[0.         0.         0.         1.        ]
 [0.07843137 0.07843137 0.07843137 1.        ]
 [0.07843137 0.07843137 0.07843137 1.        ]
 [0.1254902  0.1254902  0.1254902  1.        ]
 [0.13333333 0.13333333 0.13333333 1.        ]
 [0.14117647 0.14117647 0.14117647 1.        ]
 [0.17254902 0.17254902 0.17254902 1.        ]
 [0.18039216 0.18039216 0.18039216 1.        ]
 [0.19215686 0.19215686 0.19215686 1.        ]
 [0.20392157 0.20392157 0.20392157 1.        ]
 [0.77647059 0.77647059 0.77647059 1.        ]
 [0.78431373 0.78431373 0.78431373 1.        ]
 [0.78823529 0.78823529 0.78823529 1.        ]
 [0.79607843 0.79607843 0.79607843 1.        ]
 [0.79607843 0.79607843 0.79607843 1.        ]
 [0.79607843 0.79607843 0.79607843 1.        ]
 [0.84313725 0.84313725 0.84313725 1.        ]
 [0.89803922 0.89803922 0.89803922 1.        ]
 [0.94117647 0.94117647 0.94117647 1.        ]
 [1.         1.         1.         1.        ]]

matplotlib颜色映射似乎要求传递的值介于0和1之间。将数据数组规格化为介于0和1之间(包括“MinMaxScaling”),似乎会产生(r、g、b、a)值,这些值表示有用的灰度梯度

c = combined.values.copy()
c = (c - c.min()) / (c.max() - c.min())

cmap = mcolors.LinearSegmentedColormap.from_list("", ['white', 'black'])
print(cmap(c))

[[0.         0.         0.         1.        ]
 [0.07843137 0.07843137 0.07843137 1.        ]
 [0.07843137 0.07843137 0.07843137 1.        ]
 [0.1254902  0.1254902  0.1254902  1.        ]
 [0.13333333 0.13333333 0.13333333 1.        ]
 [0.14117647 0.14117647 0.14117647 1.        ]
 [0.17254902 0.17254902 0.17254902 1.        ]
 [0.18039216 0.18039216 0.18039216 1.        ]
 [0.19215686 0.19215686 0.19215686 1.        ]
 [0.20392157 0.20392157 0.20392157 1.        ]
 [0.77647059 0.77647059 0.77647059 1.        ]
 [0.78431373 0.78431373 0.78431373 1.        ]
 [0.78823529 0.78823529 0.78823529 1.        ]
 [0.79607843 0.79607843 0.79607843 1.        ]
 [0.79607843 0.79607843 0.79607843 1.        ]
 [0.79607843 0.79607843 0.79607843 1.        ]
 [0.84313725 0.84313725 0.84313725 1.        ]
 [0.89803922 0.89803922 0.89803922 1.        ]
 [0.94117647 0.94117647 0.94117647 1.        ]
 [1.         1.         1.         1.        ]]

谢谢,这是正确的方向,但是这个方法在半路上会导致一个非常陡峭的截断,你可以看到中间的跳跃从0.2跳到0.7。我发现
c=(c/c.max())
可以更好地最小化跳转,但它只给我留下1到.73的范围。我想知道是否还有更好的方法来规范这些。内置于colormap或plotting函数将非常棒…@MajorMajor,输入数据有一个跳跃(从大约4.3到3.6),所以我要说colormap正在完成它的工作:Plol哎呀,完全忘记了我是从数据集的两端获取的。。。今晚我真是疯了,谢谢你指出这点。@MajorMajor,发生在我们所有人身上-不客气,很高兴见到你!注意,这通常像
norm=plt.Normalize(c.min(),c.max())那样编写;CMAP(范数(值))< /代码>谢谢,这是正确的方向,但是这个方法在半路上会导致一个非常陡峭的截断,你可以看到中间的跳跃从0.2跳到0.7。我发现
c=(c/c.max())
可以更好地最小化跳转,但它只给我留下1到.73的范围。我想知道是否还有更好的方法来规范这些。内置于colormap或plotting函数将非常棒…@MajorMajor,输入数据有一个跳跃(从大约4.3到3.6),所以我要说colormap正在完成它的工作:Plol哎呀,完全忘记了我是从数据集的两端获取的。。。今晚我真是疯了,谢谢你指出这点。@MajorMajor,发生在我们所有人身上-不客气,很高兴见到你!注意,这通常像
norm=plt.Normalize(c.min(),c.max())那样编写;cmap(标准值)