前回の続きです。
特定の列の値に応じて色付けをするとき、条件式が使える、と紹介しましたが、条件式が複雑な場合は、予め mutate で色付けする条件を決めておく方が読みやすいコードになります。
plot_data <- input_data %>%
mutate("condition" = if_else(Sample2 > 1, "high",
if_else(Sample2 < -1, "low", "middle")))
> plot_data
# A tibble: 100 x 3
Sample1 Sample2 condition
<dbl> <dbl> <chr>
1 0.0145 0.550 middle
2 1.00 -0.627 middle
3 0.193 -0.300 middle
4 1.45 0.612 middle
5 -1.25 -0.134 middle
6 0.965 0.113 middle
7 0.0219 0.351 middle
8 0.0158 -1.11 low
9 0.802 0.357 middle
10 -0.387 -0.828 middle
# … with 90 more rows
上記の例では、新たに condition として、色付け用の列を定義しています。if_else() 関数を用いて、 Sample2 > 1 のものを “high“、そうでない場合は、もう一度 if_else() で判定して、 Sample2 < -1 であれば、 “low“、それ以外を “middle” と定義しています。
if_else(条件式, 真の値, 偽の値)
例では、偽の値に、もう一度 if_else() を適用しています。(case_when() 関数を用いても良いです。)あとは、ここで定義した condition を aes() の color に指定するだけです。
g <- ggplot(plot_data, aes(Sample1, Sample2, color = condition))
g + geom_point()

凡例の順序を変えたい場合 (high, middle, low の順に変更したい)は、並び替えの場合と同様です。 レベルを指定した factor として上書きします。
また、カラーをマニュアルで指定する場合は、ボックスプロットの時と同様です。 scale_color_manual() や scale_color_brewer() を用います。
最終的に、下記のようなコードになります。
plot_data <- input_data %>%
mutate("condition" = if_else(Sample2 > 1, "high",
if_else(Sample2 < -1, "low", "middle"))) %>%
mutate(condition = factor(condition, levels = c("high", "middle", "low")))
g <- ggplot(plot_data, aes(Sample1, Sample2, color = condition))
g + geom_point() + scale_color_brewer(palette = "RdYlGn")
