1. ホーム
  2. r

[解決済み】安定したマッピングを持つggplot2のカテゴリ変数に色を割り当てるには?

2022-04-12 22:46:14

質問

先月からRを使いこなすようになりました。

以下は私の質問です。

ggplot2 で、安定したマッピングを持つカテゴリ変数に色を割り当てる良い方法は何でしょうか?私は、異なるサブセットと異なる数のカテゴリ変数を持つグラフのセットで一貫した色を必要とします。

例えば

plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()

ここで categoricalData は5段階あります。

そして

plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset, 
                                 color=categoricaldData.subset)) + geom_line()

ここで categoricalData.subset には3つのレベルがあります。

しかし、両方のセットに含まれる特定のレベルは、異なる色になってしまい、グラフを一緒に読むことが難しくなります。

データフレームに色のベクトルを作成する必要があるのでしょうか?あるいは、カテゴリに特定の色を割り当てる別の方法がありますか?

どのように解決するのですか?

OPの例のような単純な状況では、Thierryの回答がベストであることに同意します。しかし、以下のような複数のデータフレームで一貫したカラースキームを維持しようとする場合、別のアプローチを指摘することが有用だと思います。 ではなく は、1つの大きなデータフレームをサブセットして得られたものです。複数のデータフレームの因子レベルを管理することは、それらが別々のファイルから取得され、すべての因子レベルが各ファイルに表示されない場合、面倒になることがあります。

これを解決する一つの方法として、以下のようにカスタムマニュアルカラースケールを作成する方法があります。

#Some test data
dat <- data.frame(x=runif(10),y=runif(10),
        grp = rep(LETTERS[1:5],each = 2),stringsAsFactors = TRUE)

#Create a custom color scale
library(RColorBrewer)
myColors <- brewer.pal(5,"Set1")
names(myColors) <- levels(dat$grp)
colScale <- scale_colour_manual(name = "grp",values = myColors)

で、必要に応じてプロット上にカラースケールを追加します。

#One plot with all the data
p <- ggplot(dat,aes(x,y,colour = grp)) + geom_point()
p1 <- p + colScale

#A second plot with only four of the levels
p2 <- p %+% droplevels(subset(dat[4:10,])) + colScale

最初のプロットは次のようになります。

で、2つ目のプロットは次のようになります。

この方法では、データフレームが適切なレベルを持っていることを確認するために、それぞれのデータフレームを記憶したりチェックしたりする必要がありません。