2012-07-15 12 views
5

Tworzę bardzo szeroki wykres, który po wydrukowaniu jako plik PNG zajmuje kilka tysięcy pikseli na osi X; istnieje około 20 lat codziennych danych. (To może, ale nie musi być uważane za dobrą praktykę, ale jest to na własny użytek, a nie do publikacji.) Ponieważ wykres jest tak szeroki, oś Y znika z widoku podczas przewijania wykresu. W związku z tym chcę dodać etykiety do wykresu w odstępach 2-rocznych, aby pokazać wartości na osi Y. Uzyskany wykres wygląda tak jak poniżej, z wyjątkiem, że w trosce o utrzymanie to kompaktowy Użyłem tylko 30 dni fałszywych danych i umieścić etykiety mniej więcej co 10 dni:R: W ggplot, jak dodawać wiele etykiet tekstowych na osi Y dla każdej z wielu dat na osi X

labelling plot with y-axis values in gggplot2

Działa to mniej więcej tak wymagane, ale zastanawiam się, czy istnieje lepszy sposób podejścia do niego, jak na tym wykresie (patrz kod poniżej) Mam kolumnę dla każdej z 3 wartości osi Y o wartości 120, 140 i 160. Prawdziwe dane mają o wiele więcej poziomów , więc otrzymam 15 wywołań do geom_text, aby umieścić wszystko na obszarze działki.

P. Czy istnieje prostszy sposób na umieszczenie na wykresie wszystkich 20 dat nieparzystych, z 15 etykietami na datę, na wykresie naraz?

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) 

Odpowiedz

7

ggplot2 lubi dane być w długim formacie, więc melt() ing tekst w długim formacie pozwala tworzyć pojedyncze wywołanie geom_text():

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

Wtedy twoje polecenie wykreślenie staje:

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

działa idealnie, dzięki. Musi topnieć częściej! – SlowLearner

Powiązane problemy