应用色彩美学后,geom_dotplot()会失去躲闪

nac*_*aco 7 r colors fill ggplot2

我想在X轴上按一个类别组织我的数据,但是按照另一个类别对其进行着色,如下例所示:

图1,没有着色:

require(ggplot2)
nocolor <- ggplot(mtcars, aes(x=as.factor(cyl), y=disp)) + 
  geom_dotplot(binaxis="y", stackdir = "center")
print(nocolor)
Run Code Online (Sandbox Code Playgroud)

图2,带着色:

nododge <- ggplot(mtcars, aes(x=as.factor(cyl), y=disp, fill=as.factor(gear))) + 
  geom_dotplot(binaxis="y", stackdir = "center")
print(nododge)
Run Code Online (Sandbox Code Playgroud)

引入着色后发生的一个问题是属于不同组的点不再相互闪避.这会导致我的真实数据出现问题,因为我得到的点恰好具有相同的值并且完全相互模糊.

然后我尝试了这个,但它使我的数据乱码:

图3:

garbled <- ggplot(mtcars, aes(x=as.factor(cyl), y=disp)) +
  geom_dotplot(binaxis="y", stackdir = "center", fill=as.factor(mtcars$gear))
print(garbled)
Run Code Online (Sandbox Code Playgroud)

点相互躲闪,但着色只是随机的,并不符合实际数据.

我期望这个问题的答案可以解决我的问题,但着色仍然是随机的:

图4:

graphdata <- mtcars
graphdata$colorname <- as.factor(graphdata$gear) 
levels(graphdata$colorname) <- c("red", "blue", "black")
jalapic <- ggplot(graphdata, aes(x=as.factor(cyl), y=disp)) +
  geom_dotplot(binaxis="y", stackdir = "center", fill=as.character(graphdata$colorname))
print(jalapic)
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何让图#2中的点相互躲闪,或者如何修复图3或图4中的着色?我真的很感激任何帮助,谢谢.

Jaa*_*aap 5

使用binpositions = "all"stackgroups = TRUE:

ggplot(mtcars, aes(x=as.factor(cyl), y=disp, fill=as.factor(gear))) + 
  geom_dotplot(binaxis="y", stackdir = "center", binpositions="all", stackgroups=TRUE)
Run Code Online (Sandbox Code Playgroud)

得到:

在此输入图像描述

可能的替代方案是使用stackdir = "up":

ggplot(mtcars, aes(x=as.factor(cyl), y=disp, fill=as.factor(gear))) + 
  geom_dotplot(binaxis="y", stackdir = "up", binpositions="all", stackgroups=TRUE)
Run Code Online (Sandbox Code Playgroud)

这使:

在此输入图像描述