我正在尝试使用基于标签向量y
(大小为3)的颜色绘制散点图。标签来自{0,1,5}集。但是下面的代码没有给我预期的情节。颜色未正确绘制。而不是黄色,黑色被绘制,并且没有红色仅绘制为蓝色(也是黑色更大的点)。
from sklearn.datasets.samples_generator import make_blobs;
import numpy as np;
import matplotlib.pyplot as plt;
import matplotlib.colors as clrs;
X,y = make_blobs(n_samples=100, n_features = 2, centers = 5, cluster_std = 4.8, random_state=1000);
tr_sz = 40;
y = np.ones(y.shape,dtype=np.uint8);
y[tr_sz:] = 0;
ind1 = np.random.choice(tr_sz,size=12);
y[ind1] = 5
colors = ['yellow', 'red', 'blue'];
fig, ax1 = plt.subplots(figsize=(3.25,3));
print y;
ax1.scatter(X[:,0],X[:,1], s=y+1, c=y, cmap=clrs.ListedColormap(colors));
fig.savefig('test.pdf');
答案 0 :(得分:0)
你有几个问题
您的色彩映射表将从您的列表中创建,因此无法知道1
应该映射到red
- 它只是映射数据的max
( 5)到blue
,min
(0)为黄色,其余为插值,因此1
也会映射为黄色。如果您在数据中将1替换为3(例如,使用行y = np.array([k if k!=1 else 3 for k in y ])
),则会看到红色。
您的积分非常小 - 特别是y==0
(您的标记半径仅为1)的情况。在这种情况下,标记周围的线是您看到的,而不是填充颜色。你认为你看到黑色的地方 - 你的标记实际上是黄色的,只有 非常 小。解决这个问题的方法就是将大小乘以一个常数因子。
这是实现我认为你想要的一种方式(替换样品的第12-15行):
colors = {0:'yellow', 1:'red', 5:'blue'};
fig, ax1 = plt.subplots(figsize=(3.25,3));
print y;
c_arr=[colors[k] for k in y]
ax1.scatter(X[:,0],X[:,1], s=(y+1)*20, c=c_arr);