ggpubr|讓數(shù)據(jù)可視化更加優(yōu)雅

ggpubr_cover.jpg

ggpubr的基礎(chǔ)用法指南

ggpubr_github

ggpubr是由Alboukadel Kassambara創(chuàng)建的枕稀,基于ggplot2的可視化包昙沦。主要用于繪制符合出版要求的圖形椅您。

本文代碼領(lǐng)取:后臺回復(fù) ggpubr尚氛。

安裝與加載

  • CRAN安裝:
install.packages("ggpubr")
  • 或者從GitHub上安裝最新版本:
# Install
if(!require(devtools)) install.packages("devtools")
devtools::install_github("kassambara/ggpubr")
  • 加載包
library(ggplot2)
library(ggpubr)

分布圖

# 構(gòu)建數(shù)據(jù)集
set.seed(1234)
#set.seed()設(shè)定生成隨機數(shù)的種子,種子是為了讓結(jié)果具有重復(fù)性讹弯,重現(xiàn)結(jié)果况既。如果不設(shè)定種子,生成的隨機數(shù)無法重現(xiàn)组民。
wdata = data.frame(
   sex = factor(rep(c("F", "M"), each=200)),
   weight = c(rnorm(200, 55), rnorm(200, 58)))
head(wdata, 4)

set.seed(1234)

set.seed()設(shè)定生成隨機數(shù)的種子坏挠,種子是為了讓結(jié)果具有重復(fù)性,重現(xiàn)結(jié)果邪乍。如果不設(shè)定種子,生成的隨機數(shù)無法重現(xiàn)对竣。

wdata = data.frame(
sex = factor(rep(c("F", "M"), each=200)),
weight = c(rnorm(200, 55), rnorm(200, 58)))
head(wdata, 4)


```R
> head(wdata, 4)
  sex   weight
1   F 53.79293
2   F 55.27743
3   F 56.08444
4   F 52.65430

密度分布圖

ggdensityggdensity(wdata, x = "weight",
   add = "mean", rug = TRUE,
   color = "sex", fill = "sex",
   palette = c("#00AFBB", "#E7B800"))
#參數(shù)詳解
Usage
ggdensity(
  data,
  x,
  y = "..density..",
  combine = FALSE,#對于多類型數(shù)據(jù)是否分面
  merge = FALSE,#對于多類型數(shù)據(jù)是否合并
  color = "black",#線條顏色
  fill = NA,#線條填充色
  palette = NULL,#自定義顏色畫板
  size = NULL,#點庇楞、線大小
  linetype = "solid",#線條類型
  alpha = 0.5,#透明度
  title = NULL,#設(shè)置標(biāo)題
  xlab = NULL,#設(shè)置x軸標(biāo)題
  ylab = NULL,#設(shè)置y軸標(biāo)題
  facet.by = NULL,#設(shè)置分組分面
  panel.labs = NULL,#設(shè)置分面各組的標(biāo)題
  short.panel.labs = TRUE,
  add = c("none", "mean", "median"),#添加均值或中位數(shù)線
  add.params = list(linetype = "dashed"),#添加其他參數(shù)
  rug = FALSE,#是否添加邊際線
  label = NULL,#設(shè)置列標(biāo)簽
  font.label = list(size = 11, color = "black"), #設(shè)置標(biāo)簽字體
  label.select = NULL,
  repel = FALSE,#是否避字體免重疊 
  label.rectangle = FALSE,#是否給標(biāo)簽添加方框
  ggtheme = theme_pubr(),#設(shè)置畫圖主題 
  ...
)

直方圖

gghistogram(wdata, x = "weight",
   add = "mean", rug = TRUE,
   color = "sex", fill = "sex",
   palette = c("#00AFBB", "#E7B800"))

箱線圖和小提琴圖

#導(dǎo)入內(nèi)置數(shù)據(jù)
data("ToothGrowth")
df <- ToothGrowth
head(df, 4)
> head(df, 4)
   len supp dose
1  4.2   VC  0.5
2 11.5   VC  0.5
3  7.3   VC  0.5
4  5.8   VC  0.5

箱線圖

p <- ggboxplot(df,
               x = "dose", 
               y = "len",
               color = "dose", 
               palette =c("#00AFBB", "#E7B800", "#FC4E07"),
               add = "jitter",#添加散點 
               shape = "dose"#點的形狀)
p
 # 添加P值
 # 建立需要比較的分組
my_comparisons <- list( c("0.5", "1"), c("1", "2"), c("0.5", "2") )
p + stat_compare_means(comparisons = my_comparisons)+ # 添加兩兩比較的p-value
  stat_compare_means(label.y = 50)                   # 添加多組間比較p-value
# 參數(shù)詳解
stat_compare_means(
  mapping = NULL,
  data = NULL,
  method = NULL,#檢驗方法見下表
  paired = FALSE,#是否配對
  method.args = list(),#用于檢驗的附加參數(shù),如method.args = list(alternative = "greater")
  ref.group = NULL,#指定對照組
  comparisons = NULL,#包含比較分組的列表
  hide.ns = FALSE,#是否隱藏?zé)o差異的標(biāo)志ns
  label.sep = ", ",#分隔術(shù)語的字符串。默認(rèn)為“否纬,”吕晌,以分離相關(guān)系數(shù)和p值
  label = NULL,#標(biāo)簽
  label.x.npc = "left",#標(biāo)簽的x軸位置
  label.y.npc = "top",#標(biāo)簽的y軸位置
  #數(shù)字0~1,或者字符('right'临燃, 'left'睛驳, 'center'烙心, 'centre', 'middle')
  label.x = NULL,
  label.y = NULL,#指定一個數(shù)值乏沸,表示顯示標(biāo)簽的絕對坐標(biāo)位置
  vjust = 0,#向上或向下移動文本
  tip.length = 0.03,
  bracket.size = 0.3,
  step.increase = 0,
  symnum.args = list(),#默認(rèn)symnum.args <- list(cutpoints = c(0, 0.0001, 0.001, 0.01, 0.05, 1), symbols = c("****", "***", "**", "*", "ns")).可以自己修改
  geom = "text",
  position = "identity",
  na.rm = FALSE,#如果為FALSE(默認(rèn)值)淫茵,則通過警告刪除缺失的值。如果為真蹬跃,則靜默刪除缺失的值匙瘪。
  show.legend = NA,#是否包含圖例
  inherit.aes = TRUE,
  ...
)

常用的統(tǒng)計學(xué)方法

方法 R實現(xiàn)函數(shù) 描述
T-test t.test() 比較兩組(參數(shù)檢驗)
Wilcoxon test wilcox.test() 比較兩組(非參數(shù)檢驗)
ANOVA aov()或anova() 比較多組(參數(shù)檢驗)
Kruskal-Wallis kruskal.test() 比較多組(非參數(shù)檢驗)

小提琴圖+箱線圖

ggviolin(df, 
         x = "dose", 
         y = "len", 
         fill = "dose",
         palette = c("#00AFBB", "#E7B800", "#FC4E07"),
         add = "boxplot",#添加箱子 
         add.params = list(fill = "white"))+ #箱線圖填充顏色
         stat_compare_means(comparisons = my_comparisons, label = "p.signif")+ 
         stat_compare_means(label.y = 50)                                      

條圖

#構(gòu)建數(shù)據(jù)集
# 導(dǎo)入內(nèi)置數(shù)據(jù)
data("mtcars")
dfm <- mtcars
# 將cyl變量轉(zhuǎn)為因子
dfm$cyl <- as.factor(dfm$cyl)
# 添加name列
dfm$name <- rownames(dfm)
#檢查數(shù)據(jù)
head(dfm[, c("name", "wt", "mpg", "cyl")])
> head(dfm[, c("name", "wt", "mpg", "cyl")])
                               name    wt  mpg cyl
Mazda RX4                 Mazda RX4 2.620 21.0   6
Mazda RX4 Wag         Mazda RX4 Wag 2.875 21.0   6
Datsun 710               Datsun 710 2.320 22.8   4
Hornet 4 Drive       Hornet 4 Drive 3.215 21.4   6
Hornet Sportabout Hornet Sportabout 3.440 18.7   8
Valiant                     Valiant 3.460 18.1   6

順序條圖

ggbarplot(dfm, x = "name", y = "mpg",
          fill = "cyl",               # 根據(jù)cyl分組填充顏色
          color = "white",            #設(shè)置條形邊框顏色為白色
          palette = "jco",            # jco雜志配色
          sort.val = "desc",          # 降序
          sort.by.groups = FALSE,     # 不按組排序
          x.text.angle = 90           # 垂直旋轉(zhuǎn)x軸文本角度
          )
ggbarplot(dfm, x = "name", y = "mpg",
          fill = "cyl",              
          color = "white",            
          palette = "jco",           
          sort.val = "asc",           # 升序
          sort.by.groups = TRUE,      # 先分組先排序
          x.text.angle = 90         
          )

偏差圖

偏差圖顯示了定量值與參考值的偏差。

z分?jǐn)?shù)(z-score)蝶缀,也叫標(biāo)準(zhǔn)分?jǐn)?shù)(standard score)是一個數(shù)與平均數(shù)的差再除以標(biāo)準(zhǔn)差的過程丹喻。在統(tǒng)計學(xué)中,標(biāo)準(zhǔn)分?jǐn)?shù)是一個觀測或數(shù)據(jù)點的值高于被觀測值或測量值的平均值的標(biāo)準(zhǔn)偏差的符號數(shù)翁都。

#計算mpg數(shù)據(jù)的 z-score
dfm$mpg_z <- (dfm$mpg -mean(dfm$mpg))/sd(dfm$mpg)
dfm$mpg_grp <- factor(ifelse(dfm$mpg_z < 0, "low", "high"),
                     levels = c("low", "high")) #根據(jù)z分?jǐn)?shù)分組并添加為新列碍论。很好用的代碼可以記記
head(dfm[, c("name", "wt", "mpg", "mpg_z", "mpg_grp", "cyl")])
> head(dfm[, c("name", "wt", "mpg", "mpg_z", "mpg_grp", "cyl")])
                               name    wt  mpg      mpg_z mpg_grp cyl
Mazda RX4                 Mazda RX4 2.620 21.0  0.1508848    high   6
Mazda RX4 Wag         Mazda RX4 Wag 2.875 21.0  0.1508848    high   6
Datsun 710               Datsun 710 2.320 22.8  0.4495434    high   4
Hornet 4 Drive       Hornet 4 Drive 3.215 21.4  0.2172534    high   6
Hornet Sportabout Hornet Sportabout 3.440 18.7 -0.2307345     low   8
Valiant                     Valiant 3.460 18.1 -0.3302874     low   6
ggbarplot(dfm, x = "name", y = "mpg_z",
          fill = "mpg_grp",           
          color = "white",            
          palette = "jco",          
          sort.val = "asc",           
          sort.by.groups = FALSE,     
          x.text.angle = 90,          
          ylab = "MPG z-score",
          xlab = FALSE,
          legend.title = "MPG Group"
          )
ggbarplot(dfm, x = "name", y = "mpg_z",
          fill = "mpg_grp",           
          color = "white",            
          palette = "jco",            
          sort.val = "desc",          #降序
          sort.by.groups = FALSE,     
          x.text.angle = 90,          
          ylab = "MPG z-score",
          legend.title = "MPG Group",
          rotate = TRUE,              #縱向
          ggtheme = theme_minimal()
          )

點圖

棒棒糖圖

ggdotchart(dfm, x = "name", y = "mpg",
           color = "cyl",                                #顏色分組
           palette = c("#00AFBB", "#E7B800", "#FC4E07"), #常規(guī)調(diào)色板
           sorting = "ascending",                        # 升序
           add = "segments",                             # 將y = 0的段添加到點
           ggtheme = theme_pubr()                        # 主題
           )
ggdotchart(dfm, x = "name", y = "mpg",
           color = "cyl",                                
           palette = c("#00AFBB", "#E7B800", "#FC4E07"), 
           sorting = "descending",                       #降序
           add = "segments",                            
           rotate = TRUE,                                #縱向
           group = "cyl",                                #先分組
           dot.size = 6,                                 #點大小
           label = round(dfm$mpg),                       #點標(biāo)簽
           font.label = list(color = "white", size = 9,
                             vjust = 0.5),               #調(diào)整標(biāo)簽參數(shù)
           ggtheme = theme_pubr()                        
           )
ggdotchart(dfm, x = "name", y = "mpg_z",
           color = "cyl",                               
           palette = c("#00AFBB", "#E7B800", "#FC4E07"), 
           sorting = "descending",                      
           add = "segments",                             
           add.params = list(color = "lightgray", size = 2), # 更改棒(線條)顏色和大小
           group = "cyl",                                
           dot.size = 6,                                
           label = round(dfm$mpg_z,1),                        
           font.label = list(color = "white", size = 9,
                             vjust = 0.5),               
           ggtheme = theme_pubr()                       
           )+
  geom_hline(yintercept = 0, linetype = 2, color = "lightgray") #繪制水平線

Cleveland點圖

ggdotchart(dfm, x = "name", y = "mpg",
           color = "cyl",                               
           palette = c("#00AFBB", "#E7B800", "#FC4E07"), 
           sorting = "descending",                       
           rotate = TRUE,                                
           dot.size = 2,                                 
           y.text.col = TRUE,                            
           ggtheme = theme_pubr()                        
           )+
  theme_cleveland()                                      #Cleveland主題
Cleveland

參考

https://rpkgs.datanovia.com/ggpubr/


往期內(nèi)容:

ggsci | 讓你的配色Nature化

單細胞轉(zhuǎn)錄組|Seurat 4.0 使用指南

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市柄慰,隨后出現(xiàn)的幾起案子鳍悠,更是在濱河造成了極大的恐慌,老刑警劉巖先煎,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贼涩,死亡現(xiàn)場離奇詭異,居然都是意外死亡薯蝎,警方通過查閱死者的電腦和手機遥倦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來占锯,“玉大人袒哥,你說我怎么就攤上這事∠裕” “怎么了堡称?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艺演。 經(jīng)常有香客問我却紧,道長,這世上最難降的妖魔是什么胎撤? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任晓殊,我火速辦了婚禮,結(jié)果婚禮上伤提,老公的妹妹穿的比我還像新娘巫俺。我一直安慰自己,他們只是感情好肿男,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布介汹。 她就那樣靜靜地躺著却嗡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘹承。 梳的紋絲不亂的頭發(fā)上窗价,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音赶撰,去河邊找鬼舌镶。 笑死,一個胖子當(dāng)著我的面吹牛豪娜,可吹牛的內(nèi)容都是我干的餐胀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瘤载,長吁一口氣:“原來是場噩夢啊……” “哼否灾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸣奔,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤墨技,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挎狸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扣汪,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年锨匆,在試婚紗的時候發(fā)現(xiàn)自己被綠了崭别。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡恐锣,死狀恐怖茅主,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情土榴,我是刑警寧澤诀姚,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站玷禽,受9級特大地震影響赫段,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矢赁,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一瑞佩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坯台,春花似錦、人聲如沸瘫寝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咪啡,卻和暖如春首启,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撤摸。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工毅桃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人准夷。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓钥飞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親衫嵌。 傳聞我的和親對象是個殘疾皇子读宙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容