R绘图笔记 | 小提琴图与漂亮的云雨图绘制
參考前文:R繪圖筆記 | R語言繪圖系統與常見繪圖函數及參數
關于繪圖圖,前面介紹了一些:
R繪圖筆記 | 一般的散點圖繪制
R繪圖筆記 | 柱狀圖繪制
R繪圖筆記 | 直方圖和核密度估計圖的繪制
R繪圖筆記 | 二維散點圖與統計直方圖組合
R繪圖筆記 | 散點分布圖與柱形分布圖
R繪圖筆記 | 箱形圖的繪制
這里介紹小提琴圖會漂亮的云雨圖繪制,小提琴圖在生信文章中很常見,云雨圖我在文章中很少見到,但真的很漂亮,發表文章可以試試。
一.讀入數據
如果你想獲取該數據用于自己練習,下面是獲取數據的地址:
https://docs.qq.com/sheet/DV0dxREV1YkJ0ZmVj
數據格式是這樣的。
數據第A列是病人ID,B~E列是臨床信息,其他列是病人的RNAseq數據。
你可以保存副本導出,然后自己讀入。
假如我們需要繪制某基因在不同分期的表達情況。
f2.data <- data[,c(1,8)] colnames(f2.data)?<-?c("Stage","Value") table(f2.data$Stage先檢查數據是否有缺失值,分期信息不知用N來表示,可以刪除這些數據。
f2.data<-f2.data[f2.data$Stage!="N",] head(f2.data二.繪圖
1.小提琴圖
ggplot繪圖系統中,小提琴圖用geom_violin函數。
geom_violin(mapping = NULL, data = NULL, stat = "ydensity",position = "dodge", ..., draw_quantiles = NULL, trim = TRUE,scale = "area", na.rm = FALSE, show.legend = NA,inherit.aes = TRUE)trim:如果為真(默認),將小提琴的尾部修剪到數據的范圍內。如果是假的,就不要修剪尾巴。
?scale :如果“area”(默認),所有的小提琴有相同的區域(在修剪尾巴之前)。如果為“count”,面積按觀察次數成比例縮放。如果是“寬度”,那么所有的小提琴都有相同的最大寬度。
ggplot(f2.data, aes(Stage,Value))+ geom_violin(aes(fill = Stage),trim = FALSE)+geom_boxplot(width = 0.2)+scale_fill_manual(values=c(brewer.pal(5,"Set2")[c(1,3,2,5)]))+theme_classic()+labs(x='Stage',y='The expression level',title='Gene name')+theme(panel.background=element_rect(fill="white",colour="black",size=0.25),axis.line=element_line(colour="black",size=0.25),axis.title=element_text(size=13,face="plain",color="black"),axis.text = element_text(size=12,face="plain",color="black"),legend.position="none")修改trim=TRUE,scale="count",看一下效果就知道什么意思啦。
ggplot(f2.data, aes(Stage,Value))+ geom_violin(aes(fill = Stage),trim = TRUE,scale="count")+geom_boxplot(width = 0.2)+scale_fill_manual(values=c(brewer.pal(5,"Set2")[c(1,3,2,5)]))+theme_classic()+labs(x='Stage',y='The expression level',title='Gene name')+theme(panel.background=element_rect(fill="white",colour="black",size=0.25),axis.line=element_line(colour="black",size=0.25),axis.title=element_text(size=13,face="plain",color="black"),axis.text = element_text(size=12,face="plain",color="black"),legend.position="none")2.云雨圖
云雨圖在我看來很美觀,我們樣本數據大的時候,繪制云雨圖是真的很美觀。
但這個圖繪制比前面的圖形稍微復雜一點。需要自定義一個函數,用來繪制半小提琴圖,從geom-violin函數修改。下面是geom-violin函數的源碼地址:
https://github.com/hadley/ggplot2/blob/master/R/geom-violin.r
下面是修改后的代碼【參考資料1】:
"%||%" <- function(a, b) {if (!is.null(a)) a else b }geom_flat_violin <- function(mapping = NULL, data = NULL, stat = "ydensity",position = "dodge", trim = TRUE, scale = "area",show.legend = NA, inherit.aes = TRUE, ...) {layer(data = data,mapping = mapping,stat = stat,geom = GeomFlatViolin,position = position,show.legend = show.legend,inherit.aes = inherit.aes,params = list(trim = trim,scale = scale,...)) } GeomFlatViolin <-ggproto("GeomFlatViolin", Geom,setup_data = function(data, params) {data$width <- data$width %||%params$width %||% (resolution(data$x, FALSE) * 0.9)# ymin, ymax, xmin, and xmax define the bounding rectangle for each groupdata %>%group_by(group) %>%mutate(ymin = min(y),ymax = max(y),xmin = x,xmax = x + width / 2)},draw_group = function(data, panel_scales, coord) {# Find the points for the line to go all the way arounddata <- transform(data, xminv = x,xmaxv = x + violinwidth * (xmax - x)) #利用transform函數為數據框mydata增加數據newdata <- rbind(plyr::arrange(transform(data, x = xmaxv), -y),plyr::arrange(transform(data, x = xminv), y))newdata_Polygon <- rbind(newdata, newdata[1,])newdata_Polygon$colour<-NAnewdata_Path <- plyr::arrange(transform(data, x = xmaxv), -y)ggplot2:::ggname("geom_flat_violin", grobTree(GeomPolygon$draw_panel(newdata_Polygon, panel_scales, coord),GeomPath$draw_panel(newdata_Path, panel_scales, coord)))},draw_key = draw_key_polygon,default_aes = aes(weight = 1, colour = "grey20", fill = "white", size = 0.5,alpha = NA, linetype = "solid"),required_aes = c("x", "y"))geom_flat_violin函數是自定義的半小提琴圖函數,用上面的f2.data數據繪圖。下面代碼中d變量是統計數據。
這個圖就像云下面有雨滴一樣,顧名思義叫云雨圖。如果想縱向展示,去掉coord_flip()函數就可以啦。coord_flip()翻轉笛卡爾坐標使水平變為垂直。
ggplot(f2.data, aes(x=Stage, y=Value)) +geom_flat_violin(aes(fill=Stage),position=position_nudge(x=.25),color="black") +geom_jitter(aes(color=Stage), width=0.1) +geom_boxplot(width=.1,position=position_nudge(x=0.25),fill="white",size=0.5) +#coord_flip() + theme_bw() +theme( axis.text = element_text(size=13),axis.title = element_text(size=15),legend.position="none")參考資料:
R語言數據可視化之美,張杰/著
geom-violin函數幫助文檔
https://github.com/hadley/ggplot2/blob/master/R/geom-violin.r
總結
以上是生活随笔為你收集整理的R绘图笔记 | 小提琴图与漂亮的云雨图绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 23款免费web图标任你选择
- 下一篇: 【智能制造】汽车智能制造技术应用及智能工