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)容: