2015-12-14 148 views
0

我想在ggplot中使用自定義線型。如果這是不可能的(我相信這是真的),那麼我正在尋找一個聰明的黑客來繪製箭頭狀符號在上面或下面,我的線。在ggplot2中自定義線型或在線下添加自動箭頭/符號

一些背景:
我想繪製一些水質數據,並將其與標準(由歐洲水框架指令設置)進行比較以紅線顯示。下面是一些重複性的數據和我的情節:

df <- data.frame(datum <- seq.Date(as.Date("2014-01-01"), 
     as.Date("2014-12-31"),by = "week"),y=rnorm(53,mean=100,sd=40)) 

(plot1 <- 
ggplot(df, aes(x=datum,y=y)) + 
    geom_line() + 
    geom_point() + 
    theme_classic()+ 
    geom_hline(aes(yintercept=70),colour="red")) 

然而,在這個情節是完全不清楚,如果標準是最大值(因爲這將是例如氯離子)或最小值(因爲這將是氧)。所以我想通過添加小指針/箭頭向上或向下來清除它。最好的辦法是自定義線型,使其包含這些箭頭,但我找不到方法。
Q1:這是否可能,定義自定義線型?

所有我能想到的線下方加入了加分:

extrapoints <- data.frame(datum2 <- seq.Date(as.Date("2014-01-01"), 
    as.Date("2014-12-31"),by = "week"),y2=68) 

plot1 + geom_point(data=extrapoints, aes(x=datum2,y=y2), 
     shape=">",size=5,colour="red",rotate=90) 

plot1

不過,我似乎無法旋轉這些符號指向下方。此外,這需要每次計算X的正確間距和到線(Y)的距離,這是相當不方便的。 Q2:有沒有辦法實現這一點,最好儘可能自動化?

+0

你用x的正確間距表示什麼意思?如果我說實話,即使在旋轉箭頭('plot1 + geom_text(data = extrapoints,aes(x = datum2,y = y2,label =「>」),angle = 90,color =「red」)'')它並沒有真正說清楚。如何創建彩色矩形來表示內部/外部可接受的範圍? – Heroka

+0

@Heroka我認爲由向下指向的箭頭組成的一行表明該值應該低於該行。想到彩色矩形例如'geom_ribbon'也在我腦海中,也許可以解決這個問題。但是我也很好奇自定義線型是否可行,如果不是,其他人會如何解決這個問題。 – RHA

回答

3

我不確定要求什麼,但它聽起來好像你想要箭頭在點上或下,基於y值大於或小於某個預期值。如果是這樣的話,那麼使用geom_segment此滿足:

require(grid) # as noted by ?geom_segment 
(plot1 <- 
ggplot(df, aes(x=datum,y=y)) + geom_line()+ 
    geom_segment(data = data.frame(df$datum, y= 70, up=df$y >70), 
      aes(xend = datum , yend =70 + c(-1,1)[1+up]*5), #select up/down based on 'up' 
       arrow = arrow(length = unit(0.1,"cm")) 
      ) +       # adjust units to modify size or arrow-heads 
    geom_point() + 
    theme_classic()+ 
    geom_hline(aes(yintercept=70),colour="red")) 

enter image description here

如果我錯了,什麼是需要的,你只想要一堆向下箭頭,然後就掏出東西有關創建並使用「向上」並使用減號。

+0

我寧願自定義線型,但這是一個非常好的選擇。巧妙使用'geom_segment'。謝謝! – RHA

+0

恐怕「自定義線型」不足以描述或指導我的想象力。 –

+0

標準線型是實線,虛線,點線等。我想知道是否可以定義自己的線型,例如由符號組成。說一行aaaaaaaaaaaa或###########。 – RHA