Is there a table or catalog of aesthetics for ggplot2?
RGgplot2R Problem Overview
I am new to ggplot2 and have been trying to find a comprehensive list of aesthetics. I think I understand their purpose but it is hard to know which can be used in various situations (mostly geoms?). Hadley's website occasionally lists available aesthetics on pages for individual geoms and the R doc's occasionally (though more rarely) do the same. I even found a geom for which the two do not quite match.
I searched through the comments here for an answer and even bought the book! Alas, no help.
I think it would be fantastic to have a table with all the aesthetics listed in one dimension and all the geoms (and other objects?) listed in another.
Does anyone know of such a thing?
Is there a simple way (command) in R to list all the aesthetics that can be applied to an object?
Here's how a table might start:
List x y fill size colour linetype . . .
geom_point Yes Yes Yes Yes Yes No
geom_abline Yes Yes No Yes Yes Yes
.
.
.
A catalog of aesthetic definitions/parameters would be a very helpful reference as well.
R Solutions
Solution 1 - R
Below is the default_aes
for each geom,
colour size linetype alpha fill weight shape width height angle hjust vjust family fontface lineheight
abline black 0.5 1 yes -- -- -- -- -- -- -- -- -- -- --
area yes 0.5 1 yes grey20 -- -- -- -- -- -- -- -- -- --
bar yes 0.5 1 yes grey20 1 -- -- -- -- -- -- -- -- --
bin2d yes 0.5 1 yes grey60 1 -- -- -- -- -- -- -- -- --
boxplot grey20 0.5 solid yes white 1 16 -- -- -- -- -- -- -- --
contour #3366FF 0.5 1 yes -- 1 -- -- -- -- -- -- -- -- --
crossbar black 0.5 1 yes yes -- -- -- -- -- -- -- -- -- --
density black 0.5 1 yes yes 1 -- -- -- -- -- -- -- -- --
density2d #3366FF 0.5 1 yes -- 1 -- -- -- -- -- -- -- -- --
errorbar black 0.5 1 yes -- -- -- 0.5 -- -- -- -- -- -- --
errorbarh black 0.5 1 yes -- -- -- -- 0.5 -- -- -- -- -- --
freqpoly black 0.5 1 yes -- -- -- -- -- -- -- -- -- -- --
hex yes 0.5 -- yes grey50 -- -- -- -- -- -- -- -- -- --
hline black 0.5 1 yes -- -- -- -- -- -- -- -- -- -- --
linerange black 0.5 1 yes -- -- -- -- -- -- -- -- -- -- --
path black 0.5 1 yes -- -- -- -- -- -- -- -- -- -- --
point black 2 -- yes yes -- 16 -- -- -- -- -- -- -- --
pointrange black 0.5 1 yes yes -- 16 -- -- -- -- -- -- -- --
polygon NA 0.5 1 yes grey20 -- -- -- -- -- -- -- -- -- --
quantile #3366FF 0.5 1 yes -- 1 -- -- -- -- -- -- -- -- --
raster -- -- -- yes grey20 -- -- -- -- -- -- -- -- -- --
rect yes 0.5 1 yes grey20 -- -- -- -- -- -- -- -- -- --
ribbon yes 0.5 1 yes grey20 -- -- -- -- -- -- -- -- -- --
rug black 0.5 1 yes -- -- -- -- -- -- -- -- -- -- --
segment black 0.5 1 yes -- -- -- -- -- -- -- -- -- -- --
smooth #3366FF 0.5 1 0.4 grey60 1 -- -- -- -- -- -- -- -- --
step black 0.5 1 yes -- -- -- -- -- -- -- -- -- -- --
text black 5 -- yes -- -- -- -- -- 0 0.5 0.5 1 1.2
tile yes 0.1 1 yes grey20 -- -- -- -- -- -- -- -- -- --
violin grey20 0.5 solid yes white 1 -- -- -- -- -- -- -- -- --
vline black 0.5 1 yes -- -- -- -- -- -- -- -- -- -- --
and the ugly code I used to hack this,
find_aes <- function(geom="point"){
tryCatch({
Geom <- getFromNamespace(paste("Geom", ggplot2:::firstUpper(geom), sep=""),
"ggplot2")
tmp <- unclass(Geom$default_aes)
tmp[is.na(tmp)] <- "yes"
data.frame(tmp, stringsAsFactors=FALSE)
}, error = function(e) {})
}
funs <- grep("^geom_", ls("package:ggplot2"),val=T)
geoms <- gsub("^geom_", "", funs)
all <- lapply(geoms, find_aes)
names(all) <- geoms
relevant <- sapply(all, function(x) !is.null(x) && nrow(x) > 0)
library(plyr)
results = do.call("rbind.fill",all)
rownames(results) <- names(relevant[relevant])
results[is.na(results)] <- "--"
options(width=9999)
capture.output(print(results), file="aes.txt")
Solution 2 - R
Have a look to Aesthetic specifications's vignette, by Hadley Wickham:
This vignette summarises the various formats that grid drawing functions take. Most of this information is available scattered throughout the R documentation. This appendix brings it all together in one place.
Solution 3 - R
This answer details all aesthetics, not only the default ones.
Get all Geom* function
library(tidyverse)
env <- asNamespace("ggplot2")
all_Geoms <- ls(envir = env, pattern = "^Geom.+")
all_Geoms <- mget(all_Geoms, env)
Get all aesthetics
all_aes <- map(all_Geoms, ~.$aesthetics())
# change Geom* to geom_*
names(all_aes) <-
names(all_aes) %>%
substr(5,nchar(.)) %>%
tolower() %>%
paste0("geom_",.)
# remove if geom_* doesn't exist
all_aes[!names(all_aes) %in% ls(envir = env)] <- NULL
head(all_aes, 3)
#> $geom_abline
#> [1] "slope" "intercept" "colour" "size" "linetype" "alpha"
#> [7] "group"
#>
#> $geom_area
#> [1] "x" "y" "colour" "fill" "size" "linetype"
#> [7] "alpha" "group"
#>
#> $geom_bar
#> [1] "x" "y" "colour" "fill" "size" "linetype"
#> [7] "alpha" "group"
lay out in a long table
all_aes_long <- all_aes %>%
enframe("fun","aes") %>%
unchop(aes)
all_aes_long
#> # A tibble: 325 x 2
#> fun aes
#> <chr> <chr>
#> 1 geom_abline slope
#> 2 geom_abline intercept
#> 3 geom_abline colour
#> 4 geom_abline size
#> 5 geom_abline linetype
#> 6 geom_abline alpha
#> 7 geom_abline group
#> 8 geom_area x
#> 9 geom_area y
#> 10 geom_area colour
#> # ... with 315 more rows
lay out in a wide table
I suggest to use View()
to visualize this one.
all_aes_wide <-
all_aes_long%>%
mutate(val = 1) %>%
spread(aes,val,fill = 0)
all_aes_wide
#> # A tibble: 38 x 38
#> fun alpha angle colour family fill fontface geometry group height
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 geom~ 1 0 1 0 0 0 0 1 0
#> 2 geom~ 1 0 1 0 1 0 0 1 0
#> 3 geom~ 1 0 1 0 1 0 0 1 0
#> 4 geom~ 0 0 0 0 0 0 0 1 0
#> 5 geom~ 1 0 1 0 1 0 0 1 0
#> 6 geom~ 1 0 1 0 1 0 0 1 0
#> 7 geom~ 1 0 1 0 0 0 0 1 0
#> 8 geom~ 1 0 1 0 1 0 0 1 0
#> 9 geom~ 1 0 1 0 0 0 0 1 0
#> 10 geom~ 1 0 1 0 1 0 0 1 0
#> # ... with 28 more rows, and 28 more variables: hjust <dbl>,
#> # intercept <dbl>, label <dbl>, lineheight <dbl>, linetype <dbl>,
#> # lower <dbl>, map_id <dbl>, middle <dbl>, radius <dbl>, shape <dbl>,
#> # size <dbl>, slope <dbl>, stroke <dbl>, subgroup <dbl>, upper <dbl>,
#> # vjust <dbl>, weight <dbl>, width <dbl>, x <dbl>, xend <dbl>,
#> # xintercept <dbl>, xmax <dbl>, xmin <dbl>, y <dbl>, yend <dbl>,
#> # yintercept <dbl>, ymax <dbl>, ymin <dbl>
bonus : frequency of aes
table(all_aes_long$aes)
#>
#> alpha angle colour family fill fontface
#> 37 3 36 2 20 2
#> geometry group height hjust intercept label
#> 1 38 2 2 1 2
#> lineheight linetype lower map_id middle radius
#> 2 33 1 1 1 1
#> shape size slope stroke subgroup upper
#> 4 35 1 4 2 1
#> vjust weight width x xend xintercept
#> 2 6 2 30 2 1
#> xmax xmin y yend yintercept ymax
#> 2 2 27 2 1 8
#> ymin
#> 8