看NC文章发现一幅图,是一个折线图,折线图没什么好说的,很简单就可以实现。但是我突发奇想,觉得这样的折线图可读性不是很高,不同的线,不同的颜色,组别也别较多,根本分不清谁是谁,而且找对应颜色也要花费不少时间。所以我们改造下,直接把分组标注在线上!
图片原文提供了表达数据,当然这篇文章还是巩固下数据的基本处理。原始数据和注释代码已上传群文件!!!
原文提供的数据是基因在不同事情的表达数据,而且每个组都有重复,我们首先要求每个时期每个组的平均值。
setwd('D:/KS项目/公众号文章/改造文献折线图')
df <- read.csv("df.csv", header = T, row.names = 1)
library(ggplot2)
library(reshape2)
df <- t(df)
df <- as.data.frame(df)
df$group <- c(rep('pES',3), rep('X6dSSEA4',2),rep('X8dRFP.GFP',2),
rep('X10dRFP.GFP',2),rep('X12dRFP.GFP',2),rep('X14dRFP.GFP',2),
rep('nES',3))
计算平均值并组成新的数据:
library(forcats)
df$group <- as.factor(df$group)
df$group <- fct_inorder(df$group)
mean_df <- as.data.frame(unique(df$group))
colnames(mean_df) <- 'group'
gene <- colnames(df[,-11])
for(i in 1:length(gene)){
A <- aggregate(df[,gene[i]], by=list(group=df$group),mean)
A <- A[,-1]
A <- as.data.frame(A)
colnames(A) <- gene[i]
mean_df <- cbind(mean_df, A)
}
数据转化,ggplot作图:
mean_df_long <-melt(mean_df, id.vars = c("group"),
measure.vars = 2:11,
variable.name = c('gene'),
value.name = 'value')
ggplot(mean_df_long, aes(x=group,y=value,
group=gene,
colour=as.factor(gene))) +
geom_line(lwd=1.5) +
xlab("") +
ylab("Expression")+
theme_classic() +
theme(axis.text.x = element_text(colour = "black", size = 12,angle = 45,hjust = 1),
axis.text.y = element_text(colour = "black", size = 10),
axis.title.y = element_text(color = 'black', size = 12),
axis.line = element_line(size = 1))
图片
改造的思路就是最后一列添加点,用geom_text加上label:
library(ggrepel)
data <- subset(mean_df_long, group=='nES')
ggplot(mean_df_long, aes(x=group,y=value,
group=gene,
colour=as.factor(gene))) +
geom_line(lwd=1.5) +
geom_point(data=data, aes(x= group, y= value), cex=1)+
xlab("") +
ylab("Expression")+
theme_classic() +
theme(axis.text.x = element_text(colour = "black", size = 12,angle = 45,hjust = 1),
axis.text.y = element_text(colour = "black", size = 10),
axis.title.y = element_text(color = 'black', size = 12),
axis.line = element_line(size = 1))+
theme(legend.position="none")+
geom_text_repel(data=data, aes(label=gene),size=4, fontface="italic",
size=3, segment.size=0.5, nudge_x=1, direction="y", hjust=0,nudge_y = 1)
图片
这样效果是不是好多了,自己看趋势,读者读起来更会更加方便。强烈建议SCI论文就该如此,很多时候光照legend对应的分组都得半天,尤其是颜色比较接近的时候,真的很不好。觉得分享有用的点个赞,分享一下再走呗!
网友评论