2016-07-26 5 views
3

例のデータフレーム(これを行うには良い/より多くの慣用的な方法がある場合、私に知らせて):は、ポイントラインプロットのセット用に別の伝説を持っており、縦線は、プロット

n <- 10 
group <- rep(c("A","B","C"),each = n) 
x <- rep(seq(0,1,length = n),3) 
y <- ifelse(group == "A",1+x,ifelse(group == "B",2+2*x,3+3*x)) 
df <- data.frame(group,x,y) 
xd <- 0.5 
des <- data.frame(xd) 

私が欲しいですデータの点線プロットをdfにプロットするには、xdで示されるxの位置に縦の曲線を追加し、両方に対して読み取り可能な凡例を取得します。私は、次のことを試してみました:

p <- ggplot(data = df, aes(x = x, y = y, color = group)) + geom_point() + geom_line(aes(linetype=group)) 
p <- p + geom_vline(data = des, aes(xintercept = xd), color = "blue") 
p 

enter image description here かなり私が念頭に置いていたものを、垂直線のための伝説がありませんされていません。

小さな変更(geom_vlineshow.legendパラメータを使用して、いくつかのジオメトリ、FALSEにさらにデフォルトの一つである理由私は理解していない!):

p <- ggplot(data = df, aes(x = x, y = y, color = group)) + geom_point() + geom_line(aes(linetype=group)) 
p <- p + geom_vline(data = des, aes(xintercept = xd), color = "blue", show.legend = TRUE) 
p 

enter image description here

少なくとも今伝説には縦棒が表示されていますが、私はそれをgroupと同じ "カテゴリ"(?)に入れることは望ましくありません。 Designと題された別の凡例のエントリがあり、縦線のみが含まれています。どうすればこれを達成できますか?

答えて

4

可能なアプローチは、fill =にのような余分なダミーの美学を追加するために、我々はその後scale_fill_manual()と組み合わせて二凡例を作成するために使用しますこれは:2

ggplot(data = df, aes(x = x, y = y, color = group)) + 
     geom_point() + 
     geom_line(aes(linetype=group), show.legend = TRUE) + 
     geom_vline(data = des, 
        aes(xintercept = xd, fill = "Vertical Line"), # add dummy fill 
        colour = "blue") + 
     scale_fill_manual(values = 1, "Design", # customize second legend 
       guide = guide_legend(override.aes = list(colour = c("blue")))) 

enter image description here

+1

私はあなたを与えるだろう**素晴らしい** Rickのアバターのために、悲しいかな、いい答えのために+1を与えることができます:) – DeltaIV

+0

'scale_fill_manual'に' override.aes'の必要性がありますが、どうして ' 'geom_line'ジオメトリの' show.legend = TRUE'ですか?そうでなければ解決策は機能しませんが、理由はわかりません。 – DeltaIV

+0

'geom_vline()'の中に置くこともできますが、何らかの理由で凡例が表示される方法が崩れてしまいます。それは、まだ完全には解決されていない既知の問題です。https://github.com/hadley/ggplot2/issues/1267 – mtoto

関連する問題