在 R 中创建分组箱线图
本文将演示有关如何在 R 中创建分组箱线图的多种方法。
在 R 中使用 ggplot
函数中的 fill
参数创建分组箱线图
ggplot
函数和 geom_boxplot
通常用于构造箱线图对象。ggplot
函数的第一个参数表示要使用的数据集,而第二个参数指定美学映射列表。aes
函数将 x
和 y
参数映射到 gapminder
数据集中的 continent
和 lifeExp
列,在开始时使用 dplyr
包函数过滤。然后 fill
参数映射 year
列数据并绘制每个大陆的年度箱线图。在分配给 fill
参数之前,应将 year
数据转换为 factor
;否则,绘制的图不影响分组。
library(ggplot2)
library(gridExtra)
library(gapminder)
library(dplyr)
dat <- gapminder %>%
filter(year %in% c(1972, 1992, 2007))
p1 <- ggplot(dat, aes(x = continent, y = lifeExp, fill = year)) +
geom_boxplot() +
scale_y_continuous(name = "Average Life Expectancy") +
scale_x_discrete(labels = abbreviate, name = "Continent")
p2 <- ggplot(dat, aes(x = continent, y = lifeExp, fill = factor(year))) +
geom_boxplot() +
scale_y_continuous(name = "Average Life Expectancy") +
scale_x_discrete(labels = abbreviate, name = "Continent")
grid.arrange(p1, p2, nrow = 2)
在 R 中使用 facet_wrap
函数构建分组箱线图
facet_wrap
函数是绘制按特定参数分组的多个箱线图的另一种选择。在这种情况下,我们展示了图的年度分组。请注意,facet_wrap
可以在不指定 fill
参数的情况下工作,但它有助于通过使用以下代码片段输出的颜色区分不同的图。scale_x_discrete
和 scale_y_continuous
也用于修改标签和轴名称。
library(ggplot2)
library(gridExtra)
library(gapminder)
library(dplyr)
dat <- gapminder %>%
filter(year %in% c(1972, 1992, 2007))
p3 <- ggplot(dat, aes(x = continent, y = lifeExp, fill = factor(year))) +
geom_boxplot() +
facet_wrap(~year) +
scale_y_continuous(name = "Average Life Expectancy") +
scale_x_discrete(labels = abbreviate, name = "Continent")
p3
facet_wrap
在不同的图中显示相同的比例。尽管我们可以将 free
字符串分配给 scale
参数,这会导致自动调整比例。
library(ggplot2)
library(gridExtra)
library(gapminder)
library(dplyr)
dat <- gapminder %>%
filter(year %in% c(1972, 1992, 2007))
p4 <- ggplot(dat, aes(x = continent, y = lifeExp, fill = factor(year))) +
geom_boxplot() +
facet_wrap(~year, scale = "free") +
scale_y_continuous(name = "Average Life Expectancy") +
scale_x_discrete(labels = abbreviate, name = "Continent")
p4
还可以从未过滤的 gapminder
数据集构建年度箱线图。这一次,fill
参数映射了 continent
列,而 facet_wrap
函数再次获取 year
数据。
library(ggplot2)
library(gridExtra)
library(gapminder)
library(dplyr)
p5 <- ggplot(gapminder, aes(x = continent, y = lifeExp, fill = continent)) +
facet_wrap(~year) +
geom_boxplot() +
scale_y_continuous(name = "Average Life Expectancy") +
scale_x_discrete(labels = abbreviate, name = "Continent")
p5
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn