2014-11-18 11 views
5

Więc czytałem this post i zakochałem się w kalendarzowej mapie ciepła z przerwami w stylu Tetris.kalendarz mapa termiczna wykres tetris

Jednak przykład ggplot nie implementuje przerw Tetris, które są prawdopodobnie najlepszą częścią.

Więc FTFY, gist here:

results

Procedura ta jest:

  1. stworzyć odpowiednie Tetris łamie dla danych
  2. left_join danych do przerw Tetris utworzonych w (1)
  3. przepompuj powyższe przez ggplot z niektóre specjalnie spreparowane geom s

Metodologia (1) jest dość prosta, realizowany w funkcji calendar_tetris_data(...) w gist, choć byłoby miło, aby uczynić go trochę bardziej elastyczny.

Moje pytanie dotyczy głównie (3): w jaki sposób mogę połączyć 7 geom s, aby podzielić przerwy na jedną procedurę lub na geom?

Gdybym to zrobić:

calendar_tetris_geoms <- function() { 
    geom_segment(aes(x=x, xend=x, y=ymin, yend=ymax)) +     # (a) 
    geom_segment(aes(x=xmin, xend=xmax, y=y, yend=y)) +     # (b) 
    geom_segment(aes(x=dec.x, xend=dec.x, y=dec.ymin, yend=dec.ymax)) + # (c) 
    geom_segment(aes(x=nye.xmin, xend=nye.xmax, y=nye.y, yend=nye.y)) + # (d) 
    geom_segment(x=-0.5, xend=51.5, y=7.5, yend=7.5) +     # put a line along the top 
    geom_segment(x=0.5, xend=52.5, y=0.5, yend=0.5) +     # put a line along the bottom 
    geom_text(aes(x=month.x, y=month.y, label=month.l), hjust=0.25)  # (e) 

} 

a następnie spróbuj dodać, że do mojego ggplot, to nie działa:

> ggplot(data) + calendar_tetris_geoms() 
Error in calendar_tetris_geoms() : 
    argument "plot" is missing, with no default 

I wyraźnie nie rozumiem, jak to działa. Jak to działa?

+0

@TylerRinker sedno i dostarczyły danych wyciąga z Yahoo Finance. możesz tego użyć? – dvmlls

+2

użyj 'list (geom1, geom2, geom3)' zamiast 'geom1 + geom2 + ...' – baptiste

+0

@ baptiste możesz rozwinąć? –

Odpowiedz

1

Modyfikowanie sugestię @ Baptiste, o ile mogę to zrobić:

calendar_tetris_geoms <- function() { 
    list(
    geom_segment(aes(x=x, xend=x, y=ymin, yend=ymax)),     # (a) 
    geom_segment(aes(x=xmin, xend=xmax, y=y, yend=y)),     # (b) 
    geom_segment(aes(x=dec.x, xend=dec.x, y=dec.ymin, yend=dec.ymax)), # (c) 
    geom_segment(aes(x=nye.xmin, xend=nye.xmax, y=nye.y, yend=nye.y)), # (d) 
    geom_segment(x=-0.5, xend=51.5, y=7.5, yend=7.5),     # put a line along the top 
    geom_segment(x=0.5, xend=52.5, y=0.5, yend=0.5),     # put a line along the bottom 
    geom_text(aes(x=month.x, y=month.y, label=month.l), hjust=0.25) # (e) 
) 
} 

Wtedy to działa wspaniale:

calendar_tetris_data(min(stock.data$date), max(stock.data$date)) %>% 
    left_join(stock.data) %>% 
    ggplot() + 
    geom_tile(aes(x=week, y=wday2factor(wday), fill = Adj.Close), colour = "white") + 
    calendar_tetris_geoms() + 
    facet_wrap(~ year, ncol = 1) 
Powiązane problemy