我正在对以下数据实施PCA(在代码中提供)。我选择2个组件,它以[x1,y1],[x2,y2]等形式输出。
然后我想在绘图上绘制这两台PC(a)(如代码所示)但是我想根据未转换数据(数据)中的字母对它们进行颜色编码。即观察[x1,y1]最初被指定为" A"因此,我希望它与那些具有相应的" B"和" C"标签。我认为字典是合适的,但不确定如何将原始数据集链接到新的PCA变量。
我还想用原始集合(数据)中的名称来注释这些点(来自a),即[x1,y1]将使用" John"进行注释。
非常感谢任何帮助。
%AppData%\npm
编辑:
颜色问题已解决
注释问题需要帮助:
# 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()
编码时的同样问题:
names = [rows[0] for rows in data]
plt.scatter(a[:,0], a[:,1], c=point_colours)
plt.annotate(names, (a[:,0], a[:,1]))
虽然打印名称输出我想要注释的名称,但它不会显示在图表上。我已尝试在注释参数中使用名称和str(名称),但继续获取
for i in names:
plt.annotate(names, (a[:,0], a[:,1]))
然后输出没有标签的图表。
任何想法?
答案 0 :(得分:2)
类似的东西:
*
它会创建一个带有点颜色的列表。
对于注释:
'regex:/^[\s\w-,\*]*$/'
您应移动xy以避免文本与点重叠。