68 votes

Existe-t-il un tableau ou un catalogue d'esthétique pour ggplot2 ?

Je suis nouveau dans le monde de ggplot2 et j'ai essayé de trouver une liste complète d'esthétiques. Je pense comprendre leur but mais il est difficile de savoir lesquelles peuvent être utilisées dans diverses situations (principalement les géomètres ?). Le site web de Hadley liste occasionnellement les esthétiques disponibles sur les pages des géomes individuels et la documentation de R fait de même occasionnellement (mais plus rarement). J'ai même trouvé un géom pour lequel les deux ne correspondent pas tout à fait.

J'ai cherché une réponse dans les commentaires ici et j'ai même acheté le livre ! Hélas, aucune aide.

Je pense que ce serait fantastique d'avoir un tableau avec toutes les esthétiques listées dans une dimension et tous les géomètres (et autres objets ?) listés dans une autre.

Quelqu'un connaît-il une telle chose ?

Existe-t-il un moyen simple (commande) dans R pour lister toutes les esthétiques qui peuvent être appliquées à un objet ?

Voici comment une table pourrait commencer :

List           x       y       fill      size    colour   linetype . . .
geom_point    Yes     Yes      Yes       Yes      Yes        No
geom_abline   Yes     Yes      No        Yes      Yes       Yes
.
.
.

Un catalogue des définitions/paramètres esthétiques serait également une référence très utile.

129voto

baptiste Points 19677

Vous trouverez ci-dessous le default_aes pour chaque géom,

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

et l'horrible code que j'ai utilisé pour pirater ça,

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

3 votes

+1 !, en outre, serait-il vrai que si un geom a un défaut au-dessus qu'il supporte cette aes ? Je pense que oui...

0 votes

Je ne vois pas très bien lesquels de ces éléments sont de véritables esthétiques qui peuvent être cartographiés à l'aide d'une échelle.

0 votes

@csgillespie x y y sont manquantes car elles n'ont pas de valeurs par défaut, label est également manquant, par exemple. Voir ma réponse pour avoir la liste complète.

12voto

cho7tom Points 860

Jetez un coup d'œil à Spécifications esthétiques La vignette de l'artiste, par Hadley Wickham :

Cette vignette résume les différents formats que prennent les fonctions de dessin de grille. La plupart de ces informations sont disponibles de façon éparse dans la documentation de R. Cette annexe les rassemble en un seul endroit.

11voto

Moody_Mudskipper Points 18115

Cette réponse détaille toutes les esthétiques, pas seulement celles par défaut.

Obtenir toutes les fonctions de Geom*.

library(tidyverse)
env <- asNamespace("ggplot2")
all_Geoms <- ls(envir = env, pattern = "^Geom.+")
all_Geoms <- mget(all_Geoms, env)

Obtenez toute l'esthétique

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"   

disposés sur une longue 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

disposés dans une large table

Je suggère d'utiliser View() pour visualiser celle-ci.

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 : fréquence des 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X