ggplot2: 散布図を色付け2

前回の続きです。

特定の列の値に応じて色付けをするとき、条件式が使える、と紹介しましたが、条件式が複雑な場合は、予め 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() 関数を用いても良いです。)あとは、ここで定義した conditionaes()color に指定するだけです。

g <- ggplot(plot_data, aes(Sample1, Sample2, color = condition))
g + geom_point()
if_else で condition を定義。

凡例の順序を変えたい場合 (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")
レベルとカラーを指定した例。
 

投稿者:

Atsushi Doi

株式会社セルイノベーター、主任研究員。理学博士。山口大学大学院理工学研究科修了。東京大学医科学研究所ヒトゲノム解析センターの特任助手を経て、株式会社GNIに主任研究員として勤務。その後、株式会社セルイノベーターの立ち上げに参加し、現在に至る。専門は、バイオインフォマティクス、おもにシステムバイオロジー。