2012-07-15 3 views
5

Ich mache ein sehr breites Diagramm, das, wenn es als PNG-Datei ausgegeben wird, mehrere tausend Pixel in der x-Achse; es gibt ungefähr 20 Jahre täglicher Daten. (Dies kann oder kann nicht als gute Übung angesehen werden, aber es ist für mich selbst, nicht für die Veröffentlichung.) Da das Diagramm so breit ist, verschwindet die y-Achse aus der Ansicht, wenn Sie durch das Diagramm scrollen. Dementsprechend möchte ich dem Diagramm alle zwei Jahre Beschriftungen hinzufügen, um die Werte auf der y-Achse anzuzeigen. Das resultierende Diagramm sieht wie die unten, mit der Ausnahme, dass im Interesse des Haltens es kompakt Ich habe nur 30 Tage von gefälschten Daten und setzt Etiketten etwa jeden 10. Tag verwendet:R: In ggplot, wie Sie mehrere Textbeschriftungen auf der Y-Achse für jedes Datum auf der X-Achse hinzufügen

labelling plot with y-axis values in gggplot2

Dies funktioniert mehr oder weniger als erforderlich, aber ich frage mich, ob es eine bessere Möglichkeit gibt, es zu nähern als in diesem Diagramm (siehe Code unten) Ich habe eine Spalte für jeden der 3 y-Achse Werte von 120, 140 und 160. Die realen Daten haben viele weitere Ebenen , also würde ich am Ende 15 Aufrufe von geom_text bekommen, um alles auf den Plotbereich zu setzen.

Frage: Gibt es eine einfachere Möglichkeit, alle 20 ungeraden Datumsangaben mit 15 Etiketten pro Datum gleichzeitig auf dem Diagramm anzuzeigen?

require(ggplot2) 

set.seed(12345) 
mydf <- data.frame(mydate = seq(as.Date('2012-01-01'), as.Date('2012-01-31'), by = 'day'), 
        price = runif(31, min = 100, max = 200)) 

mytext <- data.frame(mydate = as.Date(c('2012-01-10', '2012-01-20')), 
       col1 = c(120, 120), col2 = c(140,140), col3 = c(160,160)) 

p <- ggplot(data = mydf) + 
    geom_line(aes(x = mydf$mydate, y = mydf$price), colour = 'red', size = 0.8) + 
    geom_text(data = mytext, aes(x = mydate, y = col1, label = col1), size = 4) + 
    geom_text(data = mytext, aes(x = mydate, y = col2, label = col2), size = 4) + 
    geom_text(data = mytext, aes(x = mydate, y = col3, label = col3), size = 4) 

print(p) 

Antwort

7

ggplot2 Daten gerne im langen Format sein, so melt() Ihren Text in langen Format ing können Sie einen einzelnen Anruf zu geom_text() machen:

require(reshape2) 
mytext.m <- melt(mytext, id.vars = "mydate") 

Dann wird Ihr Plottbefehles wird:

ggplot(data = mydf) + 
    geom_line(aes(x = mydf$mydate, y = mydf$price), colour = 'red', size = 0.8) + 
    geom_text(data = mytext.m, aes(x = mydate, y = value, label = value), size = 4) 
+1

funktioniert perfekt, danke. Muss öfter schmelzen! – SlowLearner

Verwandte Themen