Hadley Wickham的ggplot2 是一个出色且灵活的包,用于在 R 中进行优雅的数据可视化。但是,默认生成的图需要一些格式才能发送它们以供发布。 此外,要自定义 ggplot,语法是负责的,这提高了没有高级 R 编程技能的研究人员的难度。
ggpubr包 提供了一些易于使用的功能,可以使用更简单的语法代码绘制出可供发表出版的图表。
安装
install.packages("ggpubr")
## 折线图
library(ggpubr)
df <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("D0.5", "D1", "D2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
#print(df)
#> supp dose len
#> 1 VC D0.5 6.8
#> 2 VC D1 15.0
#> 3 VC D2 33.0
#> 4 OJ D0.5 4.2
#> 5 OJ D1 10.0
#> 6 OJ D2 29.5
# Plot "len" by "dose" and
# Change line types and point shapes by a second groups: "supp"
ggline(df, x="dose", y="len",
linetype = "supp", shape = "supp")
# Change colors
# +++++++++++++++++++++
# Change color by group: "supp"
# Use custom color palette
ggline(df, x="dose", y="len",
linetype = "supp", shape = "supp",
color = "supp", palette = c("#00AFBB", "#E7B800"))
散点图
# Load data
data("mtcars")
df <- mtcars
df$cyl <- as.factor(df$cyl)
#head(df[, c("wt", "mpg", "cyl")], 3)
#> wt mpg cyl
#> Mazda RX4 2.620 21.0 6
#> Mazda RX4 Wag 2.875 21.0 6
#> Datsun 710 2.320 22.8 4
# Textual annotation
# +++++++++++++++++
df$name <- rownames(df)
ggscatter(df, x = "wt", y = "mpg",
color = "cyl", palette = c("#00AFBB", "#E7B800", "#FC4E07"),
label = "name", repel = TRUE)
饼形图
df <- data.frame(
group = c("Male", "Female", "Child"),
value = c(25, 25, 50))
#head(df)
#> group value
#> 1 Male 25
#> 2 Female 25
#> 3 Child 50
# Basic pie charts
# ++++++++++++++++++++++++++++++++
ggpie(df, "value", label = "group")
ggpie(df, "value", label = "group", fill="group")
ggpie(df, "value", label = "group", fill="group", color='white')
ggpie(df, "value", label = "group", fill="group",
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
color='white')
labs <- paste0(df$group, " (", df$value, "%)")
#> "Male (25%)" "Female (25%)" "Child (50%)"
ggpie(df, "value", label = labs, fill="group",
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
color='white')
labs <- paste0(df$group, " (", df$value, "%)")
#> "Male (25%)" "Female (25%)" "Child (50%)"
ggpie(df, "value", label = labs, fill="group",
lab.pos = "in", lab.font = "white",
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
color='white')
甜甜圈图
#> head(df)
#> group value
#> 1 Male 25
#> 2 Female 25
#> 3 Child 50
#>
# Change the position and font color of labels
ggdonutchart(df, "value", label = labs,
lab.pos = "in", lab.font = "white",
fill = "group", color = "white",
palette = c("#00AFBB", "#E7B800", "#FC4E07"))
点图
# Load data
data("mtcars")
dfm <- mtcars
# Convert the cyl variable to a factor
dfm$cyl <- as.factor(dfm$cyl)
# Add the name colums
dfm$name <- rownames(dfm)
# Inspect the data
#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
ggdotchart(dfm, x = "name", y = "mpg",
color = "cyl", # Color by groups
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # Custom color palette
sorting = "ascending", # Sort value in descending order
add = "segments", # Add segments from y = 0 to dots
ggtheme = theme_pubr() # ggplot2 theme
)
密度图
set.seed(1234)
wdata = data.frame(
sex = factor(rep(c("F", "M"), each=200)),
weight = c(rnorm(200, 55), rnorm(200, 58)))
#head(wdata, 4)
#> sex weight
#> 1 F 53.79293
#> 2 F 55.27743
#> 3 F 56.08444
#> 4 F 52.65430
# Density plot with mean lines and marginal rug
# :::::::::::::::::::::::::::::::::::::::::::::::::::
# Change outline and fill colors by groups ("sex")
# Use custom palette
ggdensity(wdata, x = "weight", color='sex')
ggdensity(wdata, x = "weight", color='sex', add='mean')
ggdensity(wdata, x = "weight", color='sex', add='mean', rug=TRUE)
ggdensity(wdata, x = "weight", color='sex', add='mean', rug=TRUE, fill='sex')
ggdensity(wdata, x = "weight", color='sex', add='mean', rug=TRUE, fill='sex',
palette = c("#00AFBB", "#E7B800"))
直方图
# Histogram plot with mean lines and marginal rug
# :::::::::::::::::::::::::::::::::::::::::::::::::::
# Change outline and fill colors by groups ("sex")
# Use custom color palette
gghistogram(wdata, x = "weight",
add = "mean", rug = TRUE,
color = "sex", fill = "sex",
palette = c("#00AFBB", "#E7B800"))
箱图
# Load data
data("ToothGrowth")
df <- ToothGrowth
#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
# Box plots with jittered points
# :::::::::::::::::::::::::::::::::::::::::::::::::::
# Change outline colors by groups: dose
# Use custom color palette
# Add jitter points and change the shape by groups
p <- ggboxplot(df, x = "dose", y = "len", add = "jitter",
color = "dose", shape = "dose",
palette =c("#00AFBB", "#E7B800", "#FC4E07"))
p
条形图
# Load data
data("mtcars")
dfm <- mtcars
# Convert the cyl variable to a factor
dfm$cyl <- as.factor(dfm$cyl)
# Add the name colums
dfm$name <- rownames(dfm)
# Inspect the data
#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", # change fill color by cyl
color = "white", # Set bar border colors to white
palette = "jco", # jco journal color palett. see ?ggpar
sort.val = "desc", # Sort the value in dscending order
sort.by.groups = TRUE, # Sort inside each group
x.text.angle = 90 # Rotate vertically x axis texts
)
ggbarplot(dfm, x = "name", y = "mpg",
fill = "cyl", # change fill color by cyl
color = "white", # Set bar border colors to white
palette = "jco", # jco journal color palett. see ?ggpar
sort.val = "desc", # Sort the value in dscending order
sort.by.groups = TRUE, # Don't sort inside each group
x.text.angle = 90, # Rotate vertically x axis texts
legend.title = "CYL" # Set legend title
)
表格
#Medium blue (mBlue) theme
ggtexttable(head(iris), rows = NULL, theme = ttheme("mBlue"))
main.title <- "Edgar Anderson's Iris Data"
subtitle <- paste0(
"This famous (Fisher's or Anderson's) iris data set gives the measurements",
" in centimeters of the variables sepal length and width and petal length and width,",
" respectively, for 50 flowers from each of 3 species of iris.",
" The species are Iris setosa, versicolor, and virginica."
) %>%
strwrap(width = 80) %>%
paste(collapse = "\n")
tab <- ggtexttable(head(iris), theme = ttheme("light"))
tab %>%
tab_add_title(text = subtitle, face = "plain", size = 10) %>%
tab_add_title(text = main.title, face = "bold", padding = unit(0.1, "line")) %>%
tab_add_footnote(text = "*Table created using ggpubr", size = 10, face = "italic")