You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ggplot复现多列带状图(Strip plot)?

用ggplot2复现并排带状图(Strip Plot)

没问题,咱们一步步来实现你想要的并排带状图。首先ggplot2需要长格式的数据框,所以第一步得把你的向量列表转换成符合要求的结构,然后就能轻松绘图了。

步骤1:整理数据

你的向量列表每个元素长度不同,我们可以用tidyverse工具包把它转成带分组标识的数据框——这样ggplot才能识别每个点属于哪个组。这里用purrr::map_dfr来批量处理列表元素,同时添加分组列:

# 加载需要的包
library(tidyverse)

# 你的原始数据
my_data = list(a=c(1,18,90), b=c(1,5,7,8,80), c=c(1,6), d=c(1,22,35,300))

# 转换成长格式数据框
tidy_data <- map_dfr(my_data, ~data.frame(value = .x), .id = "group")

如果你的数据源是带NA值的数据框(比如每个列长度相同,短的补NA),也可以用pivot_longer转成长格式并清理NA:

# 假设带NA的数据框示例
df_with_na <- data.frame(
  a = c(1,18,90,NA,NA),
  b = c(1,5,7,8,80),
  c = c(1,6,NA,NA,NA),
  d = c(1,22,35,300,NA)
)

tidy_data_na <- df_with_na %>%
  pivot_longer(cols = everything(), names_to = "group", values_to = "value") %>%
  drop_na(value) # 去掉NA值,避免绘图时出现空点

步骤2:绘制并排带状图

接下来用ggplot2绘图,用geom_jitter(带轻微抖动的点,避免完全重叠)或者geom_point来做带状图,把group放在x轴,每个组对应一个带状:

ggplot(tidy_data, aes(x = group, y = value)) +
  # 带状图核心:用jitter让点分散开,避免重叠
  geom_jitter(width = 0.2, size = 3, color = "#2c3e50") +
  # 添加主题和标签,让图表更清晰
  labs(title = "并排带状图示例", x = "分组", y = "数值") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))

可选:用分面实现更独立的并排布局

如果你希望每个带状图是独立的小面板,可以用facet_wrap实现横向排列:

ggplot(tidy_data, aes(x = 1, y = value)) +
  geom_jitter(width = 0.1, size = 3, color = "#2c3e50") +
  facet_wrap(~group, nrow = 1) + # 横向排列面板
  labs(title = "分面式并排带状图", y = "数值") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title.x = element_blank(), # 去掉无意义的x轴标签
    axis.text.x = element_blank() # 去掉x轴刻度
  )

关键参数说明

  • width:控制点在x轴方向的抖动幅度,调整这个值可以避免点过度重叠
  • size:设置点的大小,根据需求调整
  • color:自定义点的颜色,提升图表美观度
  • 如果需要更“紧凑”的带状图,也可以用geom_point(position = position_jitter(width = 0.2))替代geom_jitter

这样就能完美复现你看到的多个带状图并排的效果啦!

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:32:28