2012-07-15 52 views
5

我製作了一個非常寬的圖表,它在輸出爲PNG文件時佔用了幾千像素在x軸上;有大約20年的日常數據。 (這可能會也可能不會被認爲是好的做法,但它是爲了我自己的用途,而不是用於發佈。)由於圖表非常寬,所以在您滾動瀏覽圖表時,y軸從視圖中消失。因此,我希望以每兩年一次的間隔向標繪添加標籤,以顯示y軸上的值。生成的圖表看起來像下面的一個,除了在保持其緊湊我用只有30天假數據的利益,並把標籤大約每隔10天:R:在ggplot中,如何在x軸上爲多個日期中的每一個在y軸上添加多個文本標籤

labelling plot with y-axis values in gggplot2

此作品或多或少地但我想知道是否有更好的方法來處理它(如下面的代碼)我有一個專門針對120,140和160三個y軸的值。真實數據有更多的層次,所以我最終會收到15個對geom_text的調用,以便將所有內容放在繪圖區域中。

問:是否有一種更簡單的方法可以將所有20多個日期(每個日期有15個標籤)一次摔到圖表上?

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) 

回答

7

GGPLOT2喜歡的數據是在長格式,所以melt()荷蘭國際集團的文本長格式可以讓用戶以geom_text()一個電話:

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

那麼你的繪圖命令變爲:

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

完美的作品,謝謝。必須更多地融化! – SlowLearner 2012-07-15 14:59:14

相關問題