You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在R中使用boxplot绘制多张图:如何合并箱线图?

当然可以!有几种实用的方法能把这两组箱线图合并到一张图里,我分基础R原生绘图ggplot2包绘图两种主流方案给你讲解:

方法一:用基础R的多面板布局

基础R里可以通过par()函数设置画布布局,把多个图放在同一行或同一列。比如你想让两个箱线图并排显示,代码可以这么写:

# 设置画布为1行2列,一次性容纳两个图
par(mfrow = c(1, 2))

# 绘制第一个箱线图(品牌对比)
boxplot(my.data$speed ~ my.data$`honda/toyota`, 
        main = "Honda vs Toyota", 
        ylab = "speed in km")

# 绘制第二个箱线图(颜色对比)
boxplot(my.data$speed ~ my.data$`red/blue`, 
        main = "Red vs Blue", 
        ylab = "speed in km")

# 重置绘图参数(可选,避免影响后续的绘图操作)
par(mfrow = c(1, 1))

如果想让两个图上下排列,只需要把mfrow = c(1, 2)改成mfrow = c(2, 1)就行。

方法二:用ggplot2包(更灵活美观)

如果你追求更精致的可视化效果,ggplot2是更好的选择,它有两种常见的合并方式:

方式1:分面展示(Facet)

先把数据整理成「长格式」,然后用分面功能把两个对比放在同一张图里:

library(ggplot2)
library(tidyr)

# 把宽格式数据转换为长格式,方便ggplot2处理
tidy_data <- my.data %>%
  pivot_longer(
    cols = c(`honda/toyota`, `red/blue`), 
    names_to = "comparison_type",  # 区分是品牌对比还是颜色对比
    values_to = "group"            # 具体分组(Honda/Toyota 或 Red/Blue)
  )

# 绘制分面箱线图
ggplot(tidy_data, aes(x = group, y = speed)) +
  geom_boxplot(fill = "#69b3a2") +  # 自定义箱线图填充色
  facet_wrap(~ comparison_type, nrow = 1) +  # 1行排列两个分面
  labs(y = "speed in km", title = "Speed Comparisons") +
  theme_minimal()

方式2:手动合并两个独立ggplot对象

如果你不想转换数据格式,可以先分别画出两个ggplot图,再用gridExtra包合并:

library(ggplot2)
library(gridExtra)

# 创建第一个图(品牌对比)
p1 <- ggplot(my.data, aes(x = `honda/toyota`, y = speed)) +
  geom_boxplot() +
  labs(title = "Honda vs Toyota", y = "speed in km") +
  theme_bw()

# 创建第二个图(颜色对比)
p2 <- ggplot(my.data, aes(x = `red/blue`, y = speed)) +
  geom_boxplot() +
  labs(title = "Red vs Blue", y = "speed in km") +
  theme_bw()

# 合并两个图到一行显示
grid.arrange(p1, p2, ncol = 2)
额外方案:把所有箱线图放在同一个面板

如果你想把四个分组(Honda、Toyota、Red、Blue)的箱线图直接放在同一个坐标轴下对比,可以先整理数据:

# 给每个分组添加类型标签,区分是品牌还是颜色
my.data$brand_group <- paste("Brand:", my.data$`honda/toyota`)
my.data$color_group <- paste("Color:", my.data$`red/blue`)

# 合并分组和速度数据
combined_data <- data.frame(
  group = c(my.data$brand_group, my.data$color_group),
  speed = c(my.data$speed, my.data$speed)
)

# 绘制同一面板的箱线图
boxplot(speed ~ group, 
        data = combined_data, 
        ylab = "speed in km", 
        main = "All Speed Comparisons",
        col = c("#ff9999", "#ff9999", "#99ccff", "#99ccff"))  # 给同类型分组加相同颜色

内容的提问来源于stack exchange,提问作者mintyT

火山引擎 最新活动