R - ggplot geom_dotplot shape option

I want to use geom_dotplot to distinguish two different variables by the shape of the dots (and not the colors, as the documentation suggests). For example:

 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") 

i.e. to distinguish between x and y in the example below

enter image description here

I want all x to be points, and y to be triangles.

Is it possible? Thanks!

+7
r data-visualization ggplot2 shape
source share
1 answer

Perhaps you could hack something similar to what you want using the information from the geom_dotplot function plus the 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 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) 

enter image description here

 #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) 

enter image description here

0
source share

All Articles