如何使用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
相关产品推荐
相关产品推荐

