【发布时间】:2017-03-23 19:26:06
【问题描述】:
我想在 X 轴上按一个类别来组织我的数据,但按另一个类别为它着色,如下例所示:
图表 1,未着色:
require(ggplot2)
nocolor <- ggplot(mtcars, aes(x=as.factor(cyl), y=disp)) +
geom_dotplot(binaxis="y", stackdir = "center")
print(nocolor)
图 2,带颜色:
nododge <- ggplot(mtcars, aes(x=as.factor(cyl), y=disp, fill=as.factor(gear))) +
geom_dotplot(binaxis="y", stackdir = "center")
print(nododge)
引入着色后出现的一个问题是属于不同组的点不再相互躲避。这会导致我的真实数据出现问题,因为我得到的点恰好具有相同的值并且彼此完全模糊。
然后我尝试了这个,但它使我的数据乱码:
图 3:
garbled <- ggplot(mtcars, aes(x=as.factor(cyl), y=disp)) +
geom_dotplot(binaxis="y", stackdir = "center", fill=as.factor(mtcars$gear))
print(garbled)
点相互闪避,但颜色只是随机的,与实际数据不符。
我希望this question 的答案能够解决我的问题,但颜色仍然是随机的:
图 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)
有没有人知道如何让 Graph #2 中的点相互躲避,或者如何修复图 3 或 4 中的颜色?非常感谢任何帮助,谢谢。
【问题讨论】:
-
在图#2中,你可以做
geom_dotplot(binaxis="y", stackdir = "center", position="dodge") -
这将每个着色组隔离在单独的 x 轴上,这不是我想要的外观。我希望这些点仍然聚集在同一堆中,但可以通过颜色识别。我的问题实际上与 Kristoffer Vitting-Seerup 的问题完全相同,这在link 下的问题中得到了非常准确的描述。不过,我不知何故无法在 jalapic 的答案中找到适合我的解决方案。