2016-01-14 24 views
12

私の伝説には、geom_smooth()geom_vline()をggplot2のグラフに追加するときに奇妙な動作が発生しています。ここでは再現性の例です:R - 凡例のgeom_vlineとgeom_smoothを組み合わせた

library(ggplot2) 
n <- 60 

set.seed(123) 
df <- data.frame(Area = sample(c("A", "B", "C", "D"), size = n, replace = TRUE), 
      x = runif(n), 
      y = runif(n), 
      Type = sample(c("I", "II"), size = n, replace = TRUE), 
      Result = sample(c("K", "L", "M"), size = n, replace = TRUE)) 

df.breaks <- data.frame(Area = c("B", "C"), x = c(0.8, 0.3)) 

ggplot(df, aes(x = x, y = y)) + 
    geom_point(aes(colour = Result, shape = Type), size = 3) + 
    geom_smooth(aes(linetype = "Smooth"), colour = "green", se = FALSE) + 
    geom_hline(yintercept = 0.3) + 
    facet_wrap(~Area) + 
    geom_vline(data = df.breaks, aes(xintercept = x, linetype = "Break"), colour = "purple") + 
    scale_colour_manual(values = c("K" = "red", "L" = "orange", "M" = "blue")) + 
    scale_linetype_manual(name = "Lines", values = c("Break" = "dashed", "Smooth" = "solid")) 

enter image description here

あなたは「行」伝説が垂直と各項目におけるhorizo​​ntallラインの両方を有し、第1の場合には破線のカップルがあります気付かれるように2番目のケースでは実線が2本あります。私は、(1)横の緑色の線とそれの隣にある「スムース」というキーと、(2)「ブレイク」という横のキーを持つ縦の紫色の線を持つ凡例を作成するようにコードを調整しようとしています。私が何を試しても(linetype内/外aes()などを使用するか、またはscale_linetype_identity()を使用するか、またはのoverride.aesオプションを使用しても助けてください)私は正しい組み合わせを見つけることができませんでした!

Iは、同様の例を検索し、私はcolourfill、又はshape等に重畳された垂直線と他の記事を発見しても、私は、鉱山などlinetype凡例に縦線を持つものを見つけるcoulnd't。どんな助力も深く感謝します!ありがとう!

+2

多分これはhttps://groups.google.com/forum/embed/#!topic/ggplot2/pv_CGdzPWnE – MLavoie

+1

私も近くには '使用することでした来たことを見つけ出すことができる唯一の事を助けることができます2つの別々の凡例を作成するために 'linetype'の代わりにSmoothのために' fill'を使います。 – aosmith

+0

あなたのお返事ありがとうございます。私はより簡単な@ aosmithの提案に行きました。 – Constantinos

答えて

1

この質問に遅れて返信しましたが、他の誰か(または私の将来の自己!)がこれに興味がある場合には、回答が得られる方が良いと思いました。コメントセクションと解答を提供するために、彼の励ましでaosmithの提案@続き

、私は最終的に、プロットのためのコードを置き換える:上記の最後の2行は、元から次の行を置き換える

ggplot(df, aes(x = x, y = y)) + 
    geom_point(aes(colour = Result, shape = Type), size = 3) + 
    geom_hline(yintercept = 0.3) + 
    facet_wrap(~Area) + 
    geom_vline(data = df.breaks, 
       aes(xintercept = x, linetype = "Break"), colour = "purple") + 
    scale_colour_manual(values = c("K" = "red", "L" = "orange", "M" = "blue")) + 
    scale_linetype_manual(name = "Lines", 
          values = c("Break" = "dashed", "Smooth" = "solid")) + 
    geom_smooth(aes(fill = "Smooth"), method = "loess", colour = "green", se = FALSE) + 
    scale_fill_discrete(name = "") 

コード:

geom_smooth(aes(linetype = "Smooth"), colour = "green", se = FALSE) +

結果のグラフには、凡例の間隔とはまったく関係がありますが、元の問題は解決されています。

Vertical and Horizontal Line Legend

関連する問題