Python matplotlib Colormap-规范化许多接近值的范围
我有一个由20个值组成的系列,我试图用一个自定义的颜色映射来绘制这些值,但是它会为每个值返回相同的颜色,尽管它们是唯一的。我在更广泛的范围内使用了相同的代码,而且它很有效,似乎数字如此接近才是问题所在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
#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(标准值)