散点图:不同的颜色和每个观察的注释取决于先前未转换的数据集PCA matplotlib python

时间:2017-07-27 15:14:05

标签: python matplotlib pca

我正在对以下数据实施PCA(在代码中提供)。我选择2个组件,它以[x1,y1],[x2,y2]等形式输出。

然后我想在绘图上绘制这两台PC(a)(如代码所示)但是我想根据未转换数据(数据)中的字母对它们进行颜色编码。即观察[x1,y1]最初被指定为" A"因此,我希望它与那些具有相应的" B"和" C"标签。我认为字典是合适的,但不确定如何将原始数据集链接到新的PCA变量。

我还想用原始集合(数据)中的名称来注释这些点(来自a),即[x1,y1]将使用" John"进行注释。

非常感谢任何帮助。

%AppData%\npm

enter image description here

编辑:

颜色问题已解决

注释问题需要帮助:

# 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]))

然后输出没有标签的图表。

任何想法?

1 个答案:

答案 0 :(得分:2)

类似的东西:

*

它会创建一个带有点颜色的列表。

对于注释:

'regex:/^[\s\w-,\*]*$/'

您应移动xy以避免文本与点重叠。