使用基因名称标记3D PCA

时间:2018-03-28 05:16:31

标签: python pandas matplotlib 3d pca

我正在使用此作为指南https://python-graph-gallery.com/372-3d-pca-result/实施3D PCA图。结果让我了解不同基因序列如何聚集在一起,在这个例子中我使用了5种不同的基因,但这必须是灵活的。

除了图例中没有与图中的颜色对齐外,一切正常。它只是打印我给它的任何东西。所以我的问题是 - 写什么而不是'label = my_color'? c = my_color和cmap =“gist_rainbow”工作,那么如何让标签以类似的方式工作?我需要基因名称或至少数字。我认为制作一个带有行到基因名称的地图的系列会起作用,但它只是打印出来,因为my_color就在这里。

这可能在一行吗?我真的不想按照这个例子http://creativemorphometrics.co.vu/blog/2014/07/07/python-project-and-explore/

拆分它

我首先通过提取我想要的基因来制作tmp df:

mask = (all_df['Emm'] == 'EMM82') | (all_df['Emm'] == 'EMM1') | (all_df['Emm'] == 'EMM65') | (all_df['Emm'] == 'EMM12') | (all_df['Emm'] == 'EMM75')
tmp = all_df[mask]

转换为矩阵:

xdata = tmp.as_matrix(df.columns)

为基因制作颜色代码:

emm_nos = [emm for emm in all_df['Emm'] if emm in ['EMM82','EMM1','EMM65','EMM12', 'EMM75']]
encoder_emm = preprocessing.LabelEncoder().fit(emm_nos)
my_color=pd.Series(encoder_emm.transform(emm_nos))

然后按照教程:

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA

import seaborn as sns
sns.set_style("white")

pca = PCA(n_components=3)
pca.fit(xdata)
xdata = pca.transform(xdata)

result=pd.DataFrame(pca.transform(xdata), columns=['PCA%i' % i for i in 
range(3)], index=target_names)

fig = plt.figure(1, figsize=(25, 19))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(result['PCA0'], result['PCA1'], result['PCA2'], c=my_color, 
cmap="gist_rainbow", s=60, label=my_color)

xAxisLine = ((min(result['PCA0']), max(result['PCA0'])), (0, 0), (0,0))
ax.plot(xAxisLine[0], xAxisLine[1], xAxisLine[2], 'r')
yAxisLine = ((0, 0), (min(result['PCA1']), max(result['PCA1'])), (0,0))
ax.plot(yAxisLine[0], yAxisLine[1], yAxisLine[2], 'r')
zAxisLine = ((0, 0), (0,0), (min(result['PCA2']), max(result['PCA2'])))
ax.plot(zAxisLine[0], zAxisLine[1], zAxisLine[2], 'r')

ax.set_xlabel("PC1")
ax.set_ylabel("PC2")
ax.set_zlabel("PC3")
ax.set_title("PCA on EMM SNP dist")
plt.legend(loc='upper left', numpoints=1, ncol=3, fontsize=8, 
bbox_to_anchor=(0, 0))
plt.show()
plt.close('all')

我不允许发布图片,因此我将结果图片链接到https://github.com/shimbalama/common_modules/blob/master/5emms.png?raw=true

如何获得具有基因名称的lengend?

提前致谢!

0 个答案:

没有答案