生信喵 发表于 2021-11-4 20:12:22

为什么我的分组小提琴图不好看?

本帖最后由 生信喵 于 2021-11-4 20:41 编辑

作为开篇的介绍,这好像是我第一次写关于R画图的内容,原因呢当然是因为本人懒。现在既然有要做平台,那么就努力更新点干货给大家吧!
虽然是一门统计语言,它的画图能力也毫不逊色。“R以能创建漂亮优雅的图形而闻名。”这是《R语言实战》一书中对R语言的简短有力的一句评价。
那么在研究生涯中。对于简单的统计图,我们使用prism、excel等画出来的竟然比自己用R画出来的还要好看。不禁让我们产生了疑问,这到底是为什么呢?
于是乎,大家就开始在百度上搜啊搜,谷歌上搜啊搜,很难找到对上自己口味的图,找到了呢可能又没有代码实操。
此次就是给大家这样一次机会,自己动手,丰衣足食。图给你,代码也给你。当然啦,文章分享出去,有了影响力,以后会有更多的同学从其他地方搜到我们的内容,就更好不过了。
以TP53基因和肝癌的关系为例,下面开始主线内容:
load('20211104.Rda')#加载数据
library(ggplot2)#加载包
library(ggpubr)
library(ggthemes)1.比较癌和癌旁
df <- df1[,c('TP53','group')]#选择表达和分组的列
df$group <- as.factor(df$group)#将分组定义为因子
levels(df$group)#这里就可以看到分组的等级了,主要是为了检查,比如年龄分组,简单as.factor可能不是你想要的顺序,这个时候就需要factor(变量,levels=c('<40','40-50','≥50'))代码就不解释了,R语言的”?函数名“可以给大家很好的帮助。最后的效果呢?

是不是很赞?当然颜色不符合你的口味,大胆的去尝试不同的‘Red’Blue‘。
2.比较不同的肿瘤分级
df <- df1#373个,去除了癌旁
table(df$neoplasm_histologic_grade)#查看变量
#   G1G2G3G4
# 555 178 12312
#这个时候存在<span style="background-color: yellow;">5个空值</span>,那么我们分析前需要排除
df <- df#选取对应列
df <- na.omit(df)#373
df <- df[!df$neoplasm_histologic_grade %in% c(''),]#已排除''的样本,373-5=368
table(df$neoplasm_histologic_grade)#正常了
df$neoplasm_histologic_grade <- as.factor(df$neoplasm_histologic_grade)
levels(df$neoplasm_histologic_grade) #"G1" "G2" "G3" "G4",顺序也完美
ggviolin(df, "neoplasm_histologic_grade", "TP53", fill = "neoplasm_histologic_grade",
               palette = c('#C1FFC1','#7AC5CD','#E9967A','#FFB6C1'),
               add = "boxplot", add.params = list(fill = "white"), trim = T) +
stat_compare_means() +
labs(x = 'histologic grade', y = 'log2(TP53 fpkm +1)',title = 'TCGA-LIHC') +
theme(panel.grid = element_blank(), axis.line = element_line(colour = 'black'), panel.background = element_blank(),
      axis.text = element_text(size = 10, color = 'black'), axis.title = element_text(size = 12, color = 'black')) +
theme(plot.title = element_text(hjust = 0.5, face = "bold")) +
theme(legend.position="none")
3.自定义分组
“一千个人眼中就有一千个哈姆雷特”,莎士比亚说过这样一句话,那么在生信分析中,不同的人有不同的分析手段,展现的结果也会不同。
就好比上图G4只有12人,我们可以合并到G3组中去。
df$neoplasm_histologic_grade <- ifelse(df$neoplasm_histologic_grade %in% c('G3','G4'),'G3_4',
                                       ifelse(df$neoplasm_histologic_grade == 'G1','G1','G2'))#合并G3G4
levels(df$neoplasm_histologic_grade)#因为改动了数据,原有的因子转换成字符型了,这里返回NULL
class(df$neoplasm_histologic_grade)#查看类型果然是"character"
df$neoplasm_histologic_grade <- as.factor(df$neoplasm_histologic_grade)
levels(df$neoplasm_histologic_grade) #"G1"   "G2"   "G3_4"完美,顺序也对
ggviolin(df, "neoplasm_histologic_grade", "TP53", fill = "neoplasm_histologic_grade",
         palette = c('#C1FFC1','#7AC5CD','#E9967A','#FFB6C1'),
         add = "boxplot", add.params = list(fill = "white"), trim = T) +
stat_compare_means() +
labs(x = 'histologic grade', y = 'log2(TP53 fpkm +1)',title = 'TCGA-LIHC') +
theme(panel.grid = element_blank(), axis.line = element_line(colour = 'black'), panel.background = element_blank(),
      axis.text = element_text(size = 10, color = 'black'), axis.title = element_text(size = 12, color = 'black')) +
theme(plot.title = element_text(hjust = 0.5, face = "bold")) +
theme(legend.position="none")

至此。本篇内容介绍到这里。代码没有多余的了,全部分享给大家了。
示例数据的话,老规矩,放在下一楼

生信喵 发表于 2021-11-4 20:16:27

代码中需要用到的输入数据:临床信息和TP53的表达数据。获取示例数据请在公众号"生信喵实验柴"后台回复“20211104”。

页: [1]
查看完整版本: 为什么我的分组小提琴图不好看?