当我使用此数据集(download here)运行此ggplot2代码时...
ggplot(data=P4L_melt, aes(variable, y=value)) + geom_boxplot(aes(fill=Species), alpha=0.7, lwd=0.5, outlier.shape=NA) + geom_point(position=position_jitterdodge(jitter.width=0),aes(group=Species, colour=Species), alpha=0.5)
似乎没问题。如您所见,我们有三组(红色,绿色,蓝色),各自的观察结果与箱形图重叠。
但是,如果我们关注左下角,没有红色组,我们会看到蓝色和绿色点未对齐(在DC1,DC2和DC3中)。 如何编辑代码来解决这个问题?
答案 0 :(得分:1)
似乎geom_boxplot和position_jitterdodge对NA的处理方式不同......
这是一个(不优雅的)解决方法:
1)在你的df中创建一个列,指定点的x位置:
library(ggplot2)
P4L_melt <- read.table('P4L_melt.txt')
P4L_melt$x <- as.numeric(gsub('DC', '', P4L_melt$variable))
P4L_melt$variable <- factor(P4L_melt$variable, levels = paste('DC', unique(P4L_melt$x), sep=''))
P4L_melt$x[P4L_melt$Species=='A'] <- P4L_melt$x[P4L_melt$Species=='A'] - 0.25
P4L_melt$x[P4L_melt$Species=='C'] <- P4L_melt$x[P4L_melt$Species=='C'] + 0.25
P4L_melt$x[P4L_melt$Species=='B'&P4L_melt$variable%in%c('DC1', 'DC2', 'DC3')] <- P4L_melt$x[P4L_melt$Species=='B'&P4L_melt$variable%in%c('DC1', 'DC2', 'DC3')] - 0.2
P4L_melt$x[P4L_melt$Species=='C'&P4L_melt$variable%in%c('DC1', 'DC2', 'DC3')] <- P4L_melt$x[P4L_melt$Species=='C'&P4L_melt$variable%in%c('DC1', 'DC2', 'DC3')] - 0.05
2)将该列用作geom_point中的x位置
ggplot(data=P4L_melt, aes(variable, y=value)) +
geom_boxplot(aes(fill=Species), alpha=0.7, lwd=0.5, outlier.shape=NA) +
geom_point(aes(x=x, group=Species, colour=Species), alpha=0.5)
答案 1 :(得分:1)
好的,这是另一次尝试,也许是在顶部:)
1) 安装最新的ggplot2版本:
install.packages('tidyverse')
library('tidyverse')
2) 从我的github下载我的修改版本的position-dodge2.r及其依赖项position-collide.r
3) 将这些文件放在项目的工作目录中,并且:
source('position-collide.R')
source('position-dodge2.R')
4)现在这段代码可以给你你想要的东西!!
ggplot(data=P4L_melt, aes(variable, y=value)) +
geom_boxplot(aes(fill=Species), alpha=0.7) +
geom_point(aes(colour=Species), position=position_dodge2(width=0.75), alpha=0.5)