Есть ли таблица или каталог эстетики для ggplot2?

Вот пример из модуля itertools docs:

import itertools
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = itertools.tee(iterable)
    next(b, None)
    return zip(a, b)   

Для Python 2 вам нужно itertools.izip вместо zip:

import itertools
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = itertools.tee(iterable)
    next(b, None)
    return itertools.izip(a, b)

Как это работает:

Сначала создаются два параллельных итератора a и b (вызов tee()), оба указывающие на первый элемент исходного итерабельного. Второй итератор b перемещается на 1 шаг вперед (вызов next(b, None)). На этом этапе a указывает на s0 и b указывает на s1. И a, и b могут перемещаться по исходному итератору независимо друг от друга - функция izip принимает два итератора и создает пары возвращаемых элементов, продвигая оба итератора в одинаковом темпе.

Одно предупреждение: [tee() создает два итератора, которые могут продвигаться независимо друг от друга, но это связано с затратами. Если один из итераторов продвигается дальше другого, тогда tee() необходимо сохранить потребляемые элементы в памяти до тех пор, пока второй итератор не сравнит их (он не сможет «перемотать» исходный итератор). Здесь это не имеет значения, потому что один итератор только на шаг впереди другого, но в целом легко использовать много памяти.

И поскольку tee() может принимать n параметр, это также можно использовать для более чем двух параллельных итераторов:

def threes(iterator):
    "s -> (s0,s1,s2), (s1,s2,s3), (s2, s3,4), ..."
    a, b, c = itertools.tee(iterator, 3)
    next(b, None)
    next(c, None)
    next(c, None)
    return zip(a, b, c)

61
задан baptiste 27 July 2012 в 08:18
поделиться

1 ответ

Принятый ответ детализирует только эстетику по умолчанию, вот то, как получить всех их:

Получают всю Геометрию*, функция


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

Добирается, вся эстетика

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"   

размечает в длинной таблице

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

, размечают в широкой таблице

, которую я предлагаю использовать View() для визуализации этого.

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>

премия: частота 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
1
ответ дан 24 November 2019 в 17:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: