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")
レベルとカラーを指定した例。
 

ggplot2: 散布図を色付け

散布図を色付けする際に、特定の列を color として使用できます。ボックスプロットの時と同様に aes() の中で、 color を指定します。

ggplot(input_data, aes(Sample1, Sample2, color = Sample2))

下記は、 Sample2 の列を color に指定した場合です。

input_data <- tibble("Sample1" = rnorm(100),
                     "Sample2" = rnorm(100))

g <- ggplot(input_data, aes(Sample1, Sample2, color = Sample2))
g + geom_point()

Sample2 の値(double, 連続値) に応じて、ドットがグラデーションで色付けされます。

color に特定の列 (Sample2) を指定した場合。

color の指定には、直接、条件式を入力することもできます。下記は、 「Sample2 > 1」 を指定した例です。

g <- ggplot(input_data, aes(Sample1, Sample2, color = Sample2 > 1))
g + geom_point()

条件式の結果が、真または偽の離散値なので、色もグラデーションになりません。 Sample2 の値が 1より大きいところが 真 (TRUE) なので、水色に表示されます。(それ以外は 偽 (FALSE) の色。)

color に条件式を指定。
 

ggplot2: フォントサイズを変更する

全体のフォントのサイズを変更するには、 theme() 関数を用います。オプションの「text」にフォントのサイズを指定します。その際、直接、「size = 24」 とするだけではなく、 element_text() の中で宣言する必要があります。

theme(text = element_text(size = 24))

theme() 関数は、geom_boxplot() の後に 「+」で続けて指定します。

g <- ggplot(plot_data, aes(x = sample, y = read_count, fill = sample))
g + geom_boxplot() + theme(text = element_text(size = 24))

ggsave("boxplot_image.png", width = 4, height = 4, unit = "in")
フォントサイズの変更前
フォントサイズの変更後

theme 関数の text オプションは、 x 軸や y 軸のラベル、キャプションなど、全体に影響します。個別に指定する場合は、 theme(axis.text.x = element_text(size = 24)) などとします。

x軸のラベルの大きさだけを変更した例

その他のテキストについても、個別に細かく指定が可能です。

  • x軸のラベル: axis.text.x
  • y軸のラベル: axis.text.y
  • x軸のタイトル: axis.title.x
  • y軸のタイトル: axis.title.y
  • 凡例のタイトル: legend.title
  • など、他にもあります。

Modify components of a theme

https://ggplot2.tidyverse.org/reference/theme.html

 

ggplot2: ボックスプロットを並び替える

ggplot2 で、ボックスプロットを作成する時、x軸の並び(サンプルの並び)は、自動的にアルファベット順になります。これは、aes() に指定したパラメーターが自動的に factor 型の文字列として扱われるからです。

これは、gather のときに、並び替えたい順序に指定したとしても、変更することはできません。WT, KO の順に並んで欲しかったとしても、アルファベット順なので、 KO, WT の順になります。

plot_data <- input_data %>%
  gather(WT, KO, key = "sample", value = "read_count")

g <- ggplot(plot_data, aes(x = sample, y = read_count))
g + geom_boxplot()
WT, KO の順に並んで欲しかったが、、、

並び替えるには、gather 後に、サンプル列をレベルを指定した factor で上書きします。具体的には下記のような指定です。

plot_data <- input_data %>%
  gather(WT, KO, key = "sample", value = "read_count") %>%
  mutate(sample = factor(sample, levels = c("WT", "KO")))

# 従来の書き方だと、下記のように書けます。
# plot_data$sample <- factor(plot_data$sample, levels = c("WT", "KO"))

これで、WT、KO の順に並べることができました。

並びを指定した場合
 

ggplot2: レジェンド(凡例)を消す

ggplot2 では、プロットに色付けをすると、自動的にレジェンド(凡例)も表示されます。これが不要な場合、非表示にするにはテーマ theme() 関数で変更を行います。 legend.position に “none” を指定すると非表示にできます。

theme(legend.position = "none")

gg <- g + geom_boxplot() + scale_fill_brewer(palette = "Spectral")
gg + theme(legend.position = "none")
レジェンドを非表示にした例

テーマで変更できる項目は下記にあります。

Modify components of a theme

https://ggplot2.tidyverse.org/reference/theme.html