我想使用geom_dotplot
通过点的形状来区分两个不同的变量(而不是文档建议的颜色)。例如:
library(ggplot2)
set.seed(1)
x = rnorm(20)
y = rnorm(20)
df = data.frame(x,y)
ggplot(data = df) +
geom_dotplot(aes(x = x), fill = "red") +
geom_dotplot(aes(x=y), fill = "blue")
即,在下面的例子中区分x和y
我想将所有x设置为点,将y设置为三角形。
这可能吗?谢谢!
你可以使用geom_dotplot和base R的stripchart函数中的信息将你想要的东西组合在一起。
#Save the dot plot in an object.
dotplot <- ggplot(data = df) +
geom_dotplot(aes(x = x), fill = "red") +
geom_dotplot(aes(x=y), fill = "blue")
#Use ggplot_build to save information including the x values.
dotplot_ggbuild <- ggplot_build(dotplot)
main_info_from_ggbuild_x <- dotplot_ggbuild$data[[1]]
main_info_from_ggbuild_y <- dotplot_ggbuild$data[[2]]
#Include only the first occurrence of each x value.
main_info_from_ggbuild_x <-
main_info_from_ggbuild_x[which(duplicated(main_info_from_ggbuild_x$x) == FALSE),]
main_info_from_ggbuild_y <-
main_info_from_ggbuild_y[which(duplicated(main_info_from_ggbuild_y$x) == FALSE),]
#To demonstrate, let's first roughly reproduce the original plot.
stripchart(rep(main_info_from_ggbuild_x$x,
times=main_info_from_ggbuild_x$count),
pch=19,cex=2,method="stack",at=0,col="red")
stripchart(rep(main_info_from_ggbuild_y$x,
times=main_info_from_ggbuild_y$count),
pch=19,cex=2,method="stack",at=0,col="blue",add=TRUE)
#Now, redo using what we actually want.
#You didn't specify if you want the circles and triangles filled or not.
#If you want them filled in, just change the pch values.
stripchart(rep(main_info_from_ggbuild_x$x,
times=main_info_from_ggbuild_x$count),
pch=21,cex=2,method="stack",at=0)
stripchart(rep(main_info_from_ggbuild_y$x,
times=main_info_from_ggbuild_y$count),
pch=24,cex=2,method="stack",at=0,add=TRUE)