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

如何使用ggplot2重现目标箱线图?宽格式数据分组绘图求助

解决ggplot2多分组箱线图的问题

我懂你啦!你现在是想把四个事件类别(Cospeciation、Duplications、Host Switches、Losses)作为X轴的分组,每个类别对应各自列里的数值来绘制箱线图对吧?之前的代码只用到了Duplications列,是因为你的数据现在是宽格式,而ggplot2更适合处理长格式(tidy data),咱们只需要把数据转换一下格式就能解决问题啦,具体步骤如下:

1. 先构造你的数据集(方便测试)

首先把你提供的数据转换成R的数据框:

GGplot_Test <- data.frame(
  Cospeciation = c(3, 3, 3, 5, 5, 5, 5, 5),
  Duplications = c(4, 3, 3, 2, 2, 2, 2, 2),
  `Host Switches` = c(6, 7, 7, 6, 6, 6, 6, 6),
  Losses = c(1, 0, 0, 3, 3, 3, 3, 3)
)

2. 将宽格式数据转换为长格式

我们需要用tidyr包的pivot_longer()函数,把原来的4列合并成2列:一列记录事件类型(命名为Event),另一列记录对应的数值(命名为Value)。如果还没安装tidyr包,先执行install.packages("tidyr")安装。

library(tidyr)
library(ggplot2)

# 转换成长格式
tidy_data <- pivot_longer(GGplot_Test, 
                          cols = everything(),  # 选中所有列进行转换
                          names_to = "Event",   # 新列:存储事件类型
                          values_to = "Value")  # 新列:存储对应数值

3. 绘制多分组箱线图

现在数据格式符合ggplot2的要求了,直接绘制箱线图即可:

ggplot(tidy_data, aes(x = Event, y = Value)) +
  geom_boxplot(fill = "lightsteelblue", alpha = 0.7) +  # 可选:添加填充色和透明度美化
  labs(title = "Distribution of Different Coevolution Events",
       x = "Event Type",
       y = "Count") +
  theme_minimal()

这样就能得到你想要的效果:X轴是四个事件类别,每个类别对应各自的数值分布箱线图啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:37:48