使用ggplot2做PCA图
2017-06-23 本文已影响425人
生信杂谈
昨天使用ggplot2做PCA图的代码有些问题,并且格式也不对,今天进行更正:
代码如下:
`
rm(list=ls())
library(ggplot2)
##以R语言自带的一个数据为例USArrests
pca <- prcomp(USArrests,scale = TRUE)
#取PC1和PC2的比例
xlab <- paste("PC1","(",round((summary(pca))$importance[2,1]*100,1),"%)",sep="")
ylab <- paste("PC2","(",round((summary(pca))$importance[2,2]*100,1),"%)",sep="")
x<-"PC1"
y<-"PC2"
data_x <- data.frame(varnames=rownames(pca$x), pca$x) #为方便取用数据,将pca结果放在一个数据库里面
plot_1 <- ggplot(data_x, aes(PC1,PC2))+geom_point(aes(color=varnames),size=3)+coord_equal(ratio=1)+xlab(xlab)+ylab(ylab) # 这里先画出点,coord_equal(ratio=1) 将X轴和y轴比例设置为一样的
data_rotation <- data.frame(obsnames=row.names(pca$rotation), pca$rotation)
#获取箭头缩放比例
mult <- min(
(max(data_x[,y]) - min(data_x[,y])/(max(data_rotation[,y])-min(data_rotation[,y]))),
(max(data_x[,x]) - min(data_x[,x])/(max(data_rotation[,x])-min(data_rotation[,x])))
)
#设置箭头坐标
data_2 <- transform(data_rotation,
v1 = mult * (get(x)),
v2 = mult * (get(y))
)
#添加箭头
plot_1<-plot_1+geom_segment(data=data_2,aes(x=0,y=0,xend=v1,yend=v2),arrow=arrow(length=unit(0.2,"cm")),alpha=0.75)
#添加箭头名称
plot_1<-plot_1+geom_text(data=data_2,aes(v1,v2,label=obsnames),size=3,nudge_x=-0.05,nudge_y=-0.01)
#对图形结果进行修饰
plot_1 <- plot_1+scale_color_discrete(guide=guide_legend(title="stage type"))+theme_bw()+theme(plot.background=element_blank(),panel.background=element_blank(),panel.grid.minor=element_blank(),panel.grid.major=element_blank(),axis.title=element_text(color="black",size=15),axis.text=element_text(size=15))+guides(color=F)
# 保存图像
ggsave("PCA_example.tiff",plot=plot_1,device = "tiff",dpi=300,width = 6.5,height = 5.5)
图如下:
ggplot2做PCA图更多原创精彩视频敬请关注生信杂谈: