2014-11-18 12 views
5

So las ich this post und ich verliebte mich ein wenig in die Kalender Heat Map mit Tetris-Stil Monatspausen.Kalender Hitze Karte Tetris-Diagramm

Allerdings implementiert das ggplot Beispiel nicht die Tetris Brüche, die wohl der beste Teil sind.

So FTFY, gist here:

results

Das Verfahren hierfür ist:

  1. entsprechende erstellen Tetris bricht für Ihre Daten
  2. left_join Ihre Daten zu den Tetris erstellt Pausen (1)
  3. Pumpe die oben durch ggplot mit einige gestaltete s speziell geom

Die Methodik für die (1) ist relativ einfach, implementiert in der calendar_tetris_data(...) Funktion im gist, obwohl es schön wäre es ein wenig flexibler zu machen.

Meine Frage ist hauptsächlich um (3): Wie bündle ich die 7 geom s notwendig, um die Brüche in einem einzigen Verfahren oder geom zu machen?

Wenn ich dies tun:

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) 

} 

Und dann versuchen, das zu meinem ggplot hinzufügen, funktioniert es nicht:

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

Ich weiß nicht genau verstehen, wie das funktioniert. Wie funktioniert das?

+0

@TylerRinker der Kern i zieht Daten von Yahoo Finance zur Verfügung gestellt. kannst du das benutzen? – dvmlls

+2

Verwenden Sie 'list (geom1, geom2, geom3)' anstelle von 'geom1 + geom2 + ...' – baptiste

+0

@baptiste können Sie erarbeiten? –

Antwort

1

Ändern @ baptiste Vorschlag, wenn ich dies tun:

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

Dann ist dieses eine Behandlung funktioniert:

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)