2016-06-17 18 views
1

Ich versuche, vertikale Linien zu einem ggplot hinzufügen, die Anzahl Daten pro Monat anzeigt. Meine X-Achse ist Monat als Faktor, aber meine vertikalen Linien repräsentieren Julianische Tage.Hinzufügen von vertikalen Linie zu ggplot bar plot

Zum Beispiel mit diesen Daten:

dat <- structure(list(Month = structure(1:12, .Label = c("Jan", "Feb", 
"Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", 
"Dec"), class = c("ordered", "factor")), Data = c(1, 1, 2, 2, 
6, 11, 19, 23, 19, 13, 5, 1)), .Names = c("Month", "Data"), class = "data.frame", row.names = c(NA, 
-12L)) 

kann ich folgenden Balkendiagramm mache

ggplot(dat)+ geom_bar(aes(x= Month, y = Data), stat="identity") 

Wie kann ich zwei vertikale Linien fügen Sie dann mit dem x-Schnittpunkt von Julian Tag 68 und 252 mit geom_vline?

Ich bin mir nicht sicher, wie man die Linien, die eine kontinuierliche Skala auf den monatlichen (Faktor) X-Achsen-Daten verweisen, plotten.

+0

Welche Tage sind Tag 68 und Tag 252? – Spacedman

+0

nur ein Beispiel –

+0

Ja, ich meinte, es wäre praktisch, wenn du gesagt hättest, dass Tag 68 der März war, was immer es ist! – Spacedman

Antwort

2

Die Daten werden mit einer einzigen Einheit pro Monat aufgetragen, so müssen Sie die Zeile als Bruchteil des Jahres in Monaten hinzuzufügen, teilweise mit für die Bar Größe Offset:

ggplot(dat) + 
    geom_bar(aes(x = Month, y = Data), stat = "identity") + 
    geom_vline(xintercept = 12 * (c(68, 252)/365) + 0.5) 

prüfen dies bei den Linien für Tag auf der Suche 1 und Tag 365:

ggplot(dat) + 
    geom_bar(aes(x = Month, y = Data), stat = "identity") + 
    geom_vline(xintercept = 12 * (c(1, 365)/365) + 0.5) 

jeden zweiten Tag wird in der grafischen Darstellung linear interpoliert.

1

Wenn Ihre x Achse eine factor ist, dann wird geom_vline die Reihenfolge des Auftretens jedes Werts als Schnittpunkt verwenden.

Sie müssen dann nur identifizieren, welcher Anteil den genauen Daten entsprechen würde, die Sie suchen. In diesem Beispiel verwende ich zwei anschauliche Brüche.

ggplot(dat)+ geom_bar(aes(x= Month, y = Data), stat="identity") + 
geom_vline(xintercept = 5.2) + 
    geom_vline(xintercept = 8.7) 
+0

kann ich um eine Ausarbeitung bitten, da sich die Daten, die ich planen muss, in Zukunft wahrscheinlich ändern werden. –

+0

Ich glaube nicht, dass 5.2 und 9.2 den angegebenen Jahrestagen entsprechen. – Spacedman

+0

@ Spacedman Ich habe in der Antwort erklärt, das sind illustrative Fraktionen. Ich habe gesehen, dass du eine einfache Möglichkeit mit einberechnet hast, die genaue Position der Linien zu berechnen, großartige Arbeit! –