0
我对以下数据(代码中提供)实现了PCA。我选择了两个组件,它们以[x1,y1],[x2,y2]等形式给出输出结果。散点图:每个观察的不同颜色和注释取决于以前未转换的数据集PCA matplotlib python
然后,我想在绘图上绘制这两台PC(a)(如下面的代码所示)但是我想根据未转换的数据(数据)中的字母对它们进行颜色编码。即观察[x1,y1]最初被指定为“A”,因此我希望它与具有相应的“B”和“C”标签的颜色不同。我认为字典是合适的,但不知道如何将原始数据集链接到新的PCA变量。
我也想用原始集合(数据)中的名称来注释这些点(来自a),即[x1,y1]将用“John”注释。
任何帮助,非常感谢。
# load packages
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import scale
from sklearn.decomposition import PCA
# load data
data = np.array([["John","A",1,2,1,3,4,6],
["Julie","A",3,1,2,2,2,4],
["James","B",2,4,1,1,2,5],
["Jemma","C",3,5,1,2,3,2],
["Jet","B",1,3,2,1,1,3],
["Jane","A",2,4,2,1,3,4]])
# feature array & scale
y = data[:,[2,3,4,5,6,7]]
z = scale(y)
# PCA
pca = PCA(n_components=6)
pca.fit(z)
# scree plot
var = pca.explained_variance_ratio_
var1 = np.cumsum(np.round(pca.explained_variance_ratio_, decimals=4)*100)
#print(var1)
#plt.plot(var1)
#plt.show()
# PCA w/ 2 components
pca = PCA(n_components=2)
pca.fit(z)
a = pca.fit_transform(z)
# colour map **HELP**
#colours = {"A":"red", "B":"green", "C":"blue"}
# annotation **HELP**
# scatter plot
plt.scatter(a[:,0],a[:,1])
plt.show()
编辑:
颜色问题解决
注解问题需要帮助:
0:作为编码时names = [rows[0] for rows in data]
plt.scatter(a[:,0], a[:,1], c=point_colours)
plt.annotate(names, (a[:,0], a[:,1]))
同样的问题
虽然打印名称输出我想注释的名称,但它并不显示在图上。我已经尝试在注释参数中同时使用名称和str(名称),但不断得到
TypeError: only length-1 arrays can be converted to Python scalars
然后输出图形没有标签。
有什么想法?
辉煌,任何想法的注释,因为字典不合适,因为每个名称是唯一的? – mystifier
我想你需要一个for循环来添加注释到点。 – axaroth
看到我更新的帖子,遇到问题 – mystifier