如何创建具有不同颜色叠加点的箱线图?

How to create a box plot with superimposed points in different color?

我目前正在尝试绘制带有叠加点的箱线图。箱线图中的点必须根据因子变量在颜色上有所不同。代码运行良好,直到这里:

  MioBox <- ggplot(mydata, aes(x=mng, y=Active, fill=mng))+ 
  geom_boxplot(color="black", notch=TRUE)+ 
  geom_point(position="jitter", color="blue", alpha=.5)+ 
  geom_rug(side="l", color="black")+
  facet_grid(.~hor,scales = "free", space = "free")+
  labs(title='bla bla bla')

(见下图)

当我尝试根据变量为箱线图中的点添加颜色时plot

MioBox <- ggplot(mydata, aes(x=mng, y=Active, fill=mng))+ 
geom_boxplot(color="black", notch=TRUE)+ 
#geom_point(position="jitter", color="blue", alpha=.5)+ 
geom_rug(side="l", color="black")+
facet_grid(.~hor,scales = "free", space = "free")+
labs(title='bla bla bla')
MioBox + scale_fill_manual(values=c("#669966", "#CC9966", "#CCCC66"))+
geom_point(position="jitter",aes(color = factor(mydata$plot)))

我得到一个箱线图,它与变量图不匹配,变量图在每个箱线图中为每种颜色分配 3 个点。结果是我总是有 9 个点,但大多数时候一种颜色有 6 个点,另一种颜色有 3 个点,并且缺少一种颜色:

这里是重现问题的 table:

mydata <- read.table(header=TRUE, text="
Active hor plot mng
7.20    F   1   CH
8.80    O   1   CH
9.30    F   1   CH
9.20    O   1   CH
9.70    F   1   CH
9.30    O   1   CH
9.10    F   2   CH
7.50    O   2   CH
7.50    F   2   CH
8.70    O   2   CH
9.90    F   2   CH
7.60    O   2   CH
9.70    F   3   CH
7.70    O   3   CH
8.90    F   3   CH
8.60    O   3   CH
8.30    F   3   CH
8.30    O   3   CH
8.50    L   1   CH
7.40    L   1   CH
8.00    L   1   CH
9.70    L   2   CH
8.90    L   2   CH
8.40    L   2   CH
9.80    L   3   CH
8.00    L   3   CH
7.00    L   3   CH
7.30    F   1   Fe
6.60    O   1   Fe
6.50    F   1   Fe
6.60    O   1   Fe
6.90    F   1   Fe
5.80    O   1   Fe
6.60    F   2   Fe
7.00    O   2   Fe
6.00    F   2   Fe
5.10    O   2   Fe
6.10    F   2   Fe
5.10    O   2   Fe
5.10    F   3   Fe
6.50    O   3   Fe
7.70    F   3   Fe
6.90    O   3   Fe
5.20    F   3   Fe
6.30    O   3   Fe
6.50    L   1   Fe
5.00    L   1   Fe
7.80    L   1   Fe
5.10    L   2   Fe
5.50    L   2   Fe
5.60    L   2   Fe
5.50    L   3   Fe
7.80    L   3   Fe
7.70    L   3   Fe
7.20    F   1   W
8.80    O   1   W
7.80    F   1   W
7.80    O   1   W
7.90    F   1   W
8.10    O   1   W
8.60    F   2   W
7.40    O   2   W
7.40    F   2   W
8.40    O   2   W
7.70    F   2   W
8.90    O   2   W
6.70    F   3   W
6.10    O   3   W
7.50    F   3   W
8.60    O   3   W
7.80    F   3   W
8.60    O   3   W
8.30    L   1   W
8.20    L   1   W
8.70    L   1   W
8.60    L   2   W
6.80    L   2   W
6.30    L   2   W
7.30    L   3   W
7.10    L   3   W
7.70    L   3   W
")

有人可以帮我解决这个问题吗?

问题在于你调用 mydata$plot 而你应该只调用 plot。 ggplot 对象已经有预定义的 data frame.

您可以像这样重写最后几行来修复它:

MioBox +
scale_fill_manual(values=c("#669966", "#CC9966", "#CCCC66"))+
geom_point(position="jitter",aes(color = factor(plot)))