2016-12-07 2 views
1

Ich möchte hinzufügen und Nudge ein Textlabel in ggplot, aber Nudge_x wenn x ist POSIXct Klasse ändert nichts, egal den Wert. Beispielcode hier:stupsen Sie ein Label auf einer Zeitachse in ggplot

library(ggplot2) 

start.time <- c("7:00", "8:00", "9:30") 
end.time <- c("10:00", "11:00", "13:30") 
market <- c("Name1", "Name2", "Name3") 

df <- data.frame(market, start.time, end.time) 

df$start.time <- as.POSIXct(df$start.time, format="%H:%M") 
df$end.time <- as.POSIXct(df$end.time, format="%H:%M") 
df$length <- df$end.time - df$start.time 


ggplot(df) + 
    geom_segment(aes(x = start.time, xend = end.time, 
       y = market, yend = market), 
      color = "darkgreen", size = 2) + 
    geom_text(aes(x = min(start.time), y = market, label = length), 
     hjust = 0, size = 3, color = "darkgreen", nudge_x = -1) 

Erzeugt dieses Bild:

test plot

ich die Etiketten für die Länge der Linien nach links weiter sein möchten. Ich glaube nicht, dass Nudge_x = -1 registriert wird, weil es nicht die richtige Klasse ist.

Danke!

+0

warum nicht Sie fügen Sie einfach 'x = min (start.time) - 300' zum Beispiel. Oder eine andere Dauer, um so viel zu verschieben, wie Sie möchten? – clemlaflemme

Antwort

1

Auf Datetime Skala nudge_x = -1 verschiebt sich um 1 Sekunde nach links, die nicht sichtbar ist, können Sie von 1 Stunde (3600 Sekunden) verschieben möchten:

ggplot(df) + 
    geom_segment(aes(x = start.time, xend = end.time, 
        y = market, yend = market), 
       color = "darkgreen", size = 2) + 
    geom_text(aes(x = min(start.time), y = market, label = length), 
      hjust = 0, size = 3, color = "darkgreen", nudge_x = -3600) 

enter image description here

zu stupsen Sie um 15 Minuten an nudge_x = -15*60

+0

danke! das hat funktioniert. Ich hätte realisieren sollen, dass die Einheiten in Sekunden waren. – Alex

0

Als eine andere Option könnten Sie die Etiketten innerhalb der Segmente setzen. Zum Beispiel:

library(dplyr) 

ggplot(df) + 
    geom_segment(aes(x = start.time, xend = end.time, 
          y = market, yend = market), 
       color = "darkgreen", size = 5) + 
    geom_text(data=df %>% group_by(market) %>% 
       summarise(xval=mean(c(end.time, start.time)), 
         length=paste(length, "hours")), 
      aes(x = xval, y = market, label = length), 
      size = 3, color = "white") + 
    labs(x="Time") + theme_bw() 

enter image description here

Verwandte Themen