繁体   English   中英

plt.scatter无法识别ListedColormap()生成的cmap

[英]plt.scatter cannot recognize a cmap generated by ListedColormap()

我正在尝试使用ListedColormap()为散点图自定义Colormap。

这是散点图的数据集:

labels = [  0,   1,   1, 100, 100]
X = np.array([[0, 2],
       [0, 0],
       [1, 0],
       [5, 0],
       [5, 2]])

这段代码

color_list = ["red", "yellow", 'blue']
cmap = mpl.colors.ListedColormap(color_list)
plt.scatter(X[:,0], X[:,1], c=labels, cmap=cmap, s=200);

输出

在此输入图像描述

看来plt.scatter无法识别ListedColormap()生成的cmap

我构建了cmap ,让左下角的点变成黄色,这是没有发生的。

我对颜色顺序的理解(0 - >红色,1 - >黄色,100 - >蓝色)可能是错误的。

任何提示都将不胜感激。

基于@ImportanceOfBeingEarnest的评论,对于您当前的labels值,如果考虑等间距0-33.33,33.34-66.66,66.67-100,则不会出现黄色。 以下答案强调了这一点。 但是,如果您的labels落在正确的范围之间,则下面的第二个图显示了黄色。 有关BoundaryNorm更多示例,请查看官方页面

这里的关键行是ranges = np.linspace(labels.min(), labels.max(), len(color_list)+1) ,它将您的值( labels )范围划分为等间隔。

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

labels = np.array([  0,   1,   1, 100, 100]) # converted to array for ease
X = np.array([[0, 2], [0, 0], [1, 0], [5, 0], [5, 2]])

color_list = ["red", "yellow", 'blue']
cmap = mpl.colors.ListedColormap(color_list)

ranges = np.linspace(labels.min(), labels.max(), len(color_list)+1)
norm = mpl.colors.BoundaryNorm(ranges, cmap.N)

plt.scatter(X[:,0], X[:,1], c=labels, cmap=cmap, s=200, norm=norm)

在此输入图像描述

有黄点

labels = np.array([  0,   56,   63, 100, 100]) # <--- new label values
X = np.array([[0, 2], [0, 0], [1, 0], [5, 0], [5, 2]])

color_list = ["red", "yellow", 'blue']
cmap = mpl.colors.ListedColormap(color_list)

ranges = np.linspace(labels.min(), labels.max(), len(color_list)+1)
norm = mpl.colors.BoundaryNorm(ranges, cmap.N)

plt.scatter(X[:,0], X[:,1], c=labels, cmap=cmap, s=200, norm=norm)

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM