2017-12-01 15 views
2

私のプロット内のある点を色で表示したり、白黒表示で表示したりします。別のグループにシェイプパラメータを使用していますが、2つのレイヤーを使用してこれを行うことができます。残念ながら私は伝説を自分のポイントに対応させる方法を理解できません。これは伝説のすべてを回る上記のように、私はshow.legend = TRUEが含まれている場合ggplot2いくつかのグループ化で凡例に正しく階層化されたポイントを表示

x <- data.frame(names = rep(letters[1:24],2), 
      grouping1 = factor(rep(c("Treatment", "Control"), each = 24)), 
      grouping2 = factor(rep(rep(c("Matched","Unmatched"), each = 12), 2)), 
      values1 = runif(48, 60, 120), values2 = runif(48, 11, 25)) 


ggplot(data = x, aes(x = values1, y = values2, group = names)) + 
    geom_point(aes(shape = grouping1, color = grouping2)) + 
    geom_line(alpha = 0.2) + 
    geom_point(data = x[x$grouping1 == 1 & x$grouping2 == 1,], aes(values1, values2), 
       shape = 21, size = 3, show.legend = TRUE) 

:ここで私が何を意味するか示すための最小限の例があります。私は凡例の境界線で丸で囲まれた赤い点(グラフのようなもの)だけを望みます。何か助けに感謝します。色を持っていると特性を埋める25、 - あなたは2つのグループを組み合わせた場合enter image description here

+0

これまでのところ私はほとんどcolor' ''とともにfill'を使用してそこに着くことができますが、円がポイントと同じ色を終わります。これが黒と白になることを考えれば十分でしょうか?印刷のポイントにはどのような色を使用しますか? 'scale_color_grey'を試してみてください。 – aosmith

+0

これは大丈夫かもしれませんが、おそらく答えとしてどのように表示することができますか?大多数の人がpdfファイルを読むだけなので、私は色付けを続けたいので、 'scale_color_grey'を使うことはオプションではありません。 – Jaeoc

答えて

1

、それはその後、形状21を使用して、凡例に

x$bothgroups <- paste(x$grouping1, x$grouping2)  

をそれらすべてを取得するために簡単です。そうすることで、円を描きたい点に黒を使用するように色を設定し、暗い輪郭を作成し、円を描きたくない点を塗りつぶすのと同じ色を使用することで、輪郭のない単色の点として表示できます。

ggplot(data = x, aes(x = values1, y = values2, group = names)) + 
    geom_point(aes(shape = bothgroups, color = bothgroups, fill = bothgroups, 
       stroke = 1.5)) + #make border thicker so it is visible 
    geom_line(alpha = 0.2) + 
    scale_shape_manual(values = c(21, 24, 21, 21)) + #circle triangle circle circle 
    #fill sets color in center of points 
    scale_fill_manual(values = c("green", "green", "tomato", "green")) + 
    #color sets outline color - match to fill for points you don't want circled 
    scale_color_manual(values = c("green", "green", "black", "black")) 

enter image description here

+0

これはうまくいきますが、グルーピングが文字列変数であるため、私はそれがどのように見えるかには満足していません(これを反映するようにサンプルコードを更新しました)。可能であれば、2つのグループ化変数を凡例に分けておくことをお勧めします。 – Jaeoc

1

あなたが充填可能なポイントを使用する場合が望むものにかなり近い取得することができます。そのようにして、とcolorの両方のスケールをgrouping2にマッピングできます。これにより、1つの凡例だけが追加のgeom_pointレイヤの影響を受けます。凡例を修正して、をguide_legendで使用して、2番目のグループのサークルを削除することができます。

塗りつぶしポイントを使用すると、塗りつぶしポイントを使用するとデフォルトで凡例がどのように変わるかを変更するため、override.aesを使用しました。黒い点の周りに円を保ち、

ggplot(data = x, aes(x = values1, y = values2, group = names)) + 
    geom_point(aes(shape = grouping1, fill = grouping2, colour = grouping2)) + 
    geom_line(alpha = 0.2) + 
    geom_point(data = x[x$grouping1 == 1 & x$grouping2 == 1,], 
       aes(values1, values2, color = grouping2), 
       shape = 1, size = 3) + 
    scale_shape_manual(values = c(21, 24)) + # fillable shapes 
    guides(fill = guide_legend(override.aes = list(color = c("#F8766D", NA), 
                shape = 21)), 
      shape = guide_legend(override.aes = list(fill = "black"))) 

enter image description here

A微妙に異なるオプション:

ここ囲む円ポイントと同じ色である一つの選択肢、です。しかし、それはまた、塗りつぶした点に黒い輪郭を付ける(すなわち、「ストローク」色を黒にする)。他のグループのストロークカラーは塗りつぶしカラーと同じに保たれます。

ggplot(data = x, aes(x = values1, y = values2, group = names)) + 
    geom_point(aes(shape = grouping1, fill = grouping2, colour = grouping2)) + 
    geom_line(alpha = 0.2) + 
    geom_point(data = x[x$grouping1 == 1 & x$grouping2 == 1,], 
       aes(values1, values2, color = grouping2), 
       shape = 21, size = 3) + 
    scale_shape_manual(values = c(21, 24)) + 
    scale_color_manual(values = c("black", "#00BFC4")) + 
    guides(fill = guide_legend(override.aes = list(color = c("black", NA), 
                shape = 21)), 
      shape = guide_legend(override.aes = list(fill = "black"))) 

enter image description here

関連する問題