【R语言】24种R语言新手入门之vioplot小提琴图(三)
生活随笔
收集整理的這篇文章主要介紹了
【R语言】24种R语言新手入门之vioplot小提琴图(三)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 一、前言
- 二、基本圖形
- 2.1 基本小提琴圖
- 2.2 添加數值
- 2.3 添加散點
- 2.4 上色
- 2.5 柱狀小提琴復合圖
- 2.6 拆分小提琴圖
- 2.7 排序
- 三、進階畫圖
- 3.1 多基因組間小提琴圖
- 3.2 單基因多組小提琴圖
- 3.3 多基因多組小提琴圖
- 四、討論
一、前言
柱狀圖和箱線圖的代碼能理解了其實發現好多作圖都是可以觸類旁通的,小提琴圖作為科研結果常用展示圖也不可或缺,用ggplot或者vioplot。
二、基本圖形
2.1 基本小提琴圖
library("vioplot") #準備數據 ToothGrowth$dose <- as.factor(ToothGrowth$dose) p <- ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_violin(trim=T) #T改為F即完整的小提琴圖 p #選擇需要顯示的x項 p + scale_x_discrete(limits=c("0.5", "2"))2.2 添加數值
#添加中位值median,均值改mean p + stat_summary(fun.y=mean, geom="point", shape=23, size=2, color="red") #中位數和四分位數 p + geom_boxplot(width=0.1) #均值和標準差 p <- ggplot(ToothGrowth, aes(x=dose, y=len)) + geom_violin(trim=FALSE) p + stat_summary(fun.data=mean_sdl, mult=2, geom="pointrange", color="red")2.3 添加散點
#帶點小提琴圖 p + geom_dotplot(binaxis='y', stackdir='center', dotsize=1) #點發散 p + geom_jitter(shape=16, position=position_jitter(0.2))2.4 上色
定義顏色的代碼跟前兩章柱狀圖箱線圖的一樣,都對應著線框顏色和填充顏色。
2.5 柱狀小提琴復合圖
#準備數據 set.seed(1) n <- 10000 ii <- rbinom(n, 1, 0.5) data <- rnorm(n, mean = 130, sd = 10) * ii +rnorm(n, mean = 80, sd = 5) * (1 - ii) #柱狀圖 hist(data, probability = TRUE, col = "grey", axes = FALSE,main = "", xlab = "", ylab = "") axis(1) #密度線 lines(density(data), lwd = 2, col = "red") #添加小提琴圖 par(new = TRUE) vioplot(data, horizontal = TRUE, yaxt = "n", axes = FALSE,col = ggsci::pal_npg("nrc",alpha = 0.2)(1))2.6 拆分小提琴圖
#準備數據,分組 data <- trees tall <- trees[trees$Height >= 76, ] small <- trees[trees$Height < 76, ] #繪圖 vioplot(tall, side = "left", plotCentre = "line", col = "#3B4992B2") vioplot(small, side = "right", plotCentre = "line", col = "#EE0000B2", add = TRUE) #圖例 legend("topleft", legend = c("Tall", "Small"), fill = c("#3B4992B2","#EE0000B2"), cex = 1.25)2.7 排序
#分畫布 par(mfrow = c(1, 2)) data <- chickwts#低到高 medians <- reorder(data$feed, data$weight, median) #medians <- with(data, reorder(feed, weight, median)) # 也可用這行,效果一樣的,下面同理 vioplot(data$weight ~ medians, col = 2:(length(levels(data$feed)) + 1),xlab = "", ylab = "Weight", las = 2) #高到低 medians <- reorder(data$feed, -data$weight, median) vioplot(data$weight ~ medians, col = 2:(length(levels(data$feed)) + 1),xlab = "", ylab = "Weight", las = 2)三、進階畫圖
3.1 多基因組間小提琴圖
library("ggpubr") library("reshape2") norcol="#EE0000FF" #疾病組 concol="#3B4992FF" #正常組#讀取文件 rt=read.table(inputFile,header=T,sep="\t",check.names=F,row.names=1) x=colnames(rt)[1] colnames(rt)[1]="Type"#轉換分類矩陣數據 data=melt(rt,id.vars=c("Type")) colnames(data)=c("Type","Gene","Expression")#繪圖 pdf(file=outFile, width=6, height=5) p=ggviolin(data, x="Gene", y="Expression", color = "Type", ylab="Gene expression",xlab="Gene",#legend.title=x,add.params = list(fill="white"),palette = c(concol,norcol),width=1, add = "boxplot") #p=p+rotate_x_text(60) p1=p+stat_compare_means(aes(group=Type),method="wilcox.test", #可換其他統計方法symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1), symbols = c("***", "**", "*", " ")),label = "p.signif") print(p1) dev.off()3.2 單基因多組小提琴圖
library(ggpubr) library(ggsci) ggsci::pal_tron("legacy")(4) color=c("#FF410DFF","#6EE2FFFF","#F7C530FF","#95CC5EFF")#讀取文件 rt=read.table(inputFile,header=T,sep="\t",check.names=F) x=colnames(rt)[2] y=colnames(rt)[3] colnames(rt)=c("id","Type","Expression")#設置分組 group=levels(factor(rt$Type)) rt$Type=factor(rt$Type, levels=group) comp=combn(group,2) my_comparisons=list() for(i in 1:ncol(comp)){my_comparisons[[i]]<-comp[,i]}#繪圖 pdf(file=outFile, width=6, height=5) ggviolin(rt, x="Type", y="Expression", fill = "Type", xlab=x, ylab=paste0(y," expression"),legend.title=x,palette = color,add = "boxplot", add.params = list(fill="white"))+ #stat_compare_means(comparisons = my_comparisons) #顯示具體數值 stat_compare_means(comparisons = my_comparisons,symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1), symbols = c("***", "**", "*", "ns")),label = "p.signif") #顯著替換成星號 dev.off()3.3 多基因多組小提琴圖
library(ggplot2) library(reshape2) color = c("#FF410DFF","#6EE2FFFF","#F7C530FF","#95CC5EFF")#讀取文件 rt=read.table(inputFile, header=T,sep="\t",check.names=F,row.names=1) x=colnames(rt)[1] colnames(rt)[1]="Type"#計算組間差異 geneSig=c("") for(gene in colnames(rt)[2:ncol(rt)]){rt1=rt[,c(gene,"Type")]colnames(rt1)=c("expression","Type")p=1if(length(levels(factor(rt1$Type)))>2){test=kruskal.test(expression ~ Type, data = rt1)p=test$p.value}else{test=wilcox.test(expression ~ Type, data = rt1)p=test$p.value}Sig=ifelse(p<0.001,"***",ifelse(p<0.01,"**",ifelse(p<0.05,"*","")))geneSig=c(geneSig,Sig)# 根據p值顯著標星號 } colnames(rt)=paste0(colnames(rt),geneSig) #轉換數據類型 data=melt(rt,id.vars=c("Type")) colnames(data)=c("Type","Gene","Expression")#繪圖 pdf(file=outFile, width=9, height=5) p1=ggplot(data,aes(x=Type,y=Expression,fill=Type))+guides(fill=guide_legend(title=x))+labs(x = x, y = "Gene expression")+ #y軸geom_violin()+ scale_fill_manual(values = color) + geom_boxplot(width=0.2,position=position_dodge(0.9))+ facet_wrap(~Gene,nrow =1)+ theme_bw()+theme(axis.text.x = element_text(angle = 45, hjust = 1)) print(p1) dev.off()四、討論
小提琴圖和箱線圖其實大同小異,都是常用于展示基因組間差異表達,很基礎的描述性統計可視化圖。和violinplot區分開來,部分代碼不同,但是效果和目的一樣。每個圖都可以自己換線框、填充顏色透明度等,發文不重復,同樣可關注公主號「生信初學者」回復關鍵詞【vioplot】獲取代碼和示例數據。
總結
以上是生活随笔為你收集整理的【R语言】24种R语言新手入门之vioplot小提琴图(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虹科案例|大有可为!虹科AR医疗解决方案
- 下一篇: ZPL语言完成条形码的打印