我用Rtsne软件包构建了一个tSNE图。下面是代码
library(Rtsne)
library(ggplot2)
dtm<-read.table(args[1],sep=",",header=T,row.names=1)
dtm_t<-t(dtm)
chr_tsne_model<-Rtsne(dtm_t, perplexity=8, theta=0.1, num_threads=30)
d_tsne_1<-as.data.frame(chr_tsne_model$Y)
ggplot(d_tsne_1, aes(x=V1, y=V2)) + geom_point(size=2) + xlab("") + ylab("") + ggtitle("t-SNE") + theme_grey(base_size=21)
我在文件的第一行中有样品名称,而在第一列中有基因名称。我想看到样本间关联的尺寸减小。因此图中的点是样本。
现在,我想查看12个样本(总共25个样本中的样本)如何关联,因此希望它们是红色的,剩下的是黄色和蓝色的。
ggplot(d_tsne_1, aes(x=V1, y=V2, fill=rownames(d_tsne_1))) + geom_point(size=2) + xlab("dim1") + ylab("dim2") + ggtitle("t-SNE") + theme_grey(base_size=21) + scale_fill_manual(values=c('1'="red",'2'="red",'3'="red",'4'="red",'5'="red",'6'="red",'7'="red",'8'="red",'9'="red",'10'="red",'11'="yellow",'12'="yellow",'13'="yellow",'14'="yellow",'15'="yellow",'16'="yellow",'17'="yellow",'18'="yellow",'19'="blue",'20'="blue",'21'="blue",'22'="blue",'23'="blue",'24'="blue"))
我尝试了上述修改,但无济于事。
数据如下:
Genes Sam_1 Sam_2_PD Sam_3_PD Sam_4 Sam_5
ENSG001 1.005 1.325 2.005 3.562 0.004 4.005
ENSG002 1.023 2.355 2.005 3.666 1.004 4.005
.
.
2500 rows, 25 col
Rtsne图中的点代表列(Sam_1,Sam_2_PD等)
PS:我注意到chr_tsne_model$Y
丢失了dtm_t
中的样本名称,因此它们保留了样本顺序??
请帮助。 预先感谢
答案 0 :(得分:1)
tl; dr:是的,Rtsne()
将名称放在$Y
中,但是保留了样本的顺序。
更长的答案:
我没有您的数据,所以我将用虹膜数据集说明一些事情。
假设我做了一些实验:
experiment <- iris[!duplicated(iris[,1:4]),]
我可能想将实际数据与元数据分开(至少在我的工作中很常见)
metadata <- data.frame(sample_id = rownames(experiment),
colour = experiment$Species)
data <- as.matrix(experiment[,1:4])
对于ggplot部分,我建议您将颜色编码存储在数据框的一列中,而不要像在scale_colour_manual()
中那样手动在colour = experiment$Species
中指定每个数据点。
现在,对于tSNE部分,确实删除了样品名称,但保留了顺序。我还建议执行tSNE之前设置种子,以使其更具可重复性,因为tSNE的结果取决于数据的随机初始化。
set.seed(1)
tsne <- Rtsne(data)
在绘制之前,我们在一个数据框中收集所有相关数据:
df <- data.frame(x = tsne$Y[,1],
y = tsne$Y[,2],
colour = metadata$colour)
然后绘图
ggplot(df, aes(x, y, colour = colour)) +
geom_point()
现在我个人将删除轴刻度,轴文本和面板网格,因为来自tSNE的数字没有任何意义,它们只是嵌入坐标。此外,您可能会发现将tSNE坐标存储在元数据中很容易,因此以后可以轻松找到它们。
编辑:已经发布了更详细的数据,所以我将展示如何使用提供的变量名
# Attempt to load in data
z <- "Genes Sam_1 Sam_2_PD Sam_3_PD Sam_4 Sam_5
ENSG001 1.005 1.325 2.005 3.562 0.004 4.005
ENSG002 1.023 2.355 2.005 3.666 1.004 4.005"
# Removing column 1 because number of column names doesn't
# match number of data points
dtm <- read.table(text = z, header = T)[,-1]
接下来,在这种情况下,我们捕获一些感兴趣的元数据:样本是否具有PD后缀?
metadata <- data.frame(
sample_name = colnames(dtm),
treatment = paste0(ifelse(grepl("PD", colnames(dtm)), "", "Not "), "PD")
)
我们运行tSNE并格式化data.frame进行绘图
# Had to set perplexity to 1 because only 2 genes to work with
chr_tsne_model <- Rtsne(t(dtm), perplexity=1, theta=0.1, num_threads=30)
df <- chr_tsne_model$Y
colnames(df) <- c("x", "y")
df <- cbind(df, metadata)
然后画图:
ggplot(df, aes(x, y, colour = treatment)) +
geom_point() +
scale_colour_manual(values = c("blue","yellow")) +
# Optional
theme(axis.ticks = element_blank(),
axis.text = element_blank(),
axis.line = element_line(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
其中两行数据如下所示: