1. ホーム
  2. r

[解決済み】 boxplotに色を追加する - "離散的なスケールに連続的な値が供給される "エラー

2022-02-05 13:56:29

質問

私の問題にはとても簡単な解決策があるのでしょうが、ネットで調べても納得のいく答えが見つかりませんでした。

以下のコマンドで、以下のようなボックスプロットグラフを作成し、個々のデータ点と重ね合わせることができました。

ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
  geom_boxplot(aes(group=Age)) + 
  geom_point(aes(color = Age))

追加・変更したいことがいくつかあります。

1. 各ボックスプロットの線の色や塗りつぶしの色を、左から順に6色で変更できます(「Age」による)。

c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00")

試してみた

ggplot(data = MYdata, aes(Age, Richness)) + 
  geom_boxplot(aes(group=Age)) + 
  scale_colour_manual(values = c("#E69F00", "#56B4E9", "#009E73", 
                                 "#F0E442", "#0072B2", "#D55E00")) 

が、結果的に "Continuous value supplied to discrete scale" のエラーが発生します。

2. 左から6色を使って、各データポイントの色を変える(「Age」による)。

c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00")

試してみました。

ggplot(data = MYdata, aes(Age, Richness)) + 
  geom_boxplot(aes(group=Age)) + 
  geom_point(aes(color = Age)) + 
  scale_colour_manual(values = c("#E69F00", "#56B4E9", "#009E73", 
                                 "#F0E442", "#0072B2", "#D55E00")) 

が、エラーにもなってしまう。

離散的なスケールに連続的な値が供給される

3. 凡例のテキストを "0ヶ月"、"1ヶ月"、"3ヶ月"、"6ヶ月"、"9ヶ月"、"12ヶ月" に変更する。

解決するには?

まず、サンプルデータを提供することが有効です。 ないようなので、いくつか紹介します。

MYdata <- data.frame(Age = rep(c(0,1,3,6,9,12), each=20),
                    Richness = rnorm(120, 10000, 2500))

パート1とパート2は、同じ問題から生じています。 {{コード は連続変数ですが、あなたはそれを離散的な尺度で使おうとしています(年齢の特定の値に対して色を指定することで)。一般に、スケールは変数を視覚的にマッピングします。連続的な年齢については、データにたまたま現れた値だけでなく、年齢のすべての可能な値に対応する色があります。 しかし、いくつかの美学のために、年齢をカテゴリー変数(因子)として同時に扱うことができます。 質問の3つ目として、スケールの説明の中で、スケールの特定の区切りに対応する特定のラベルを定義することができます。これをすべてまとめると(そして、例にあるようなラベルが付いたX軸を得るために何かを追加する)。

Age

画像

この配色では、ボックスプロットの内側に入る点は見えない(ボックスプロットの塗りと同じ色だから)。 ボックスプロットを空洞にして、その色で線を描くとよいかもしれません。

ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
  geom_boxplot(aes(fill=factor(Age))) + 
  geom_point(aes(color = factor(Age))) +
  scale_x_continuous(breaks = c(0, 1, 3, 6, 9, 12)) +
  scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"),
                      labels = c("0 month", "1 month", "3 months",
                                 "6 months", "9 months", "12 months"),
                      values = c("#E69F00", "#56B4E9", "#009E73", 
                                 "#F0E442", "#0072B2", "#D55E00")) +
  scale_fill_manual(breaks = c("0", "1", "3", "6", "9", "12"),
                      labels = c("0 month", "1 month", "3 months",
                                 "6 months", "9 months", "12 months"),
                      values = c("#E69F00", "#56B4E9", "#009E73", 
                                 "#F0E442", "#0072B2", "#D55E00"))

画像

最後に、各年齢はすでにX軸で明確に定義されているので、本当に異なる色を付ける必要があるかどうかを考えてみてください。