web-dev-qa-db-ja.com

ggplotファクターの色を変更しますか?

ここで ボックスとひげのプロット の呼び出しに気付きました:

p + geom_boxplot(aes(fill = factor(cyl)))

ボックスプロット塗りつぶしに明るい赤/緑/青の色を生成します。

p + geom_boxplot(aes(fill = factor(vs)))

明確な淡い緑/赤の色を生成します。私のデータでは、2番目の色のセットを取得していますが、最初の色のセット(

p + geom_boxplot(aes(fill = factor(cyl)))

ggplotが使用する色のセットを制御し、どのように変更できますか?

ありがとう

30
user248237

デフォルトの色は、カラーホイールの周りの等間隔の色相です。これが here からどのように生成されるかを確認できます。

これらの色で_scale_fill_manual_を使用できます。

_p + scale_fill_manual(values=c("#F8766D", "#00BA38"))
_

ここでは、cylからggplot_build(p)$dataを使用して色を取得しました。

または、次のように別のパレットを使用することもできます。

_p + scale_fill_brewer(palette="Set1")
_

そして、パレットの色を見つけるために、次のことができます:

_require(RColorBrewer)
brewer.pal(9, "Set1")
_

興味がある場合は、パレットやその他のオプションについてパッケージを確認してください。

編集:@ user248237dfsf、Ialreadyが上部のリンクで指摘したように、この関数は@Andrieは生成された色を示します。

_ggplotColours <- function(n=6, h=c(0, 360) +15){
  if ((diff(h)%%360) < 1) h[2] <- h[2] - 360/n
    hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65)
}

> ggplotColours(2)
# [1] "#F8766D" "#00BFC4"

> ggplotColours(3)
# [1] "#F8766D" "#00BA38" "#619CFF"
_

生成された2つの色を見ると、最初の色は同じですが、2番目の色は同じではありません(n = 2とn = 3の場合)。これは、等間隔色相の色を生成するためです。 cylvsの色を使用する場合は、_scale_fill_manual_を設定し、この関数からn = 3で生成されたこれらの色を使用する必要があります。

これが実際に何が起こっているのかを確認するには:

_p1 <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
           geom_boxplot(aes(fill = factor(cyl)))

p2 <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
           geom_boxplot(aes(fill = factor(vs)))
_

今、あなたがするなら:

_ggplot_build(p1)$data[[1]]$fill
# [1] "#F8766D" "#00BA38" "#619CFF"

ggplot_build(p2)$data[[1]]$fill
# [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D"
_

これらはggplotColoursを使用して生成された色であり、違いの理由も明らかです。これがお役に立てば幸いです。

40
Arun

前の回答に追加:

colの代わりに)fill美学を使用する場合は、_scale_color_manual_を使用します。これはgeom_point()に便利です:

_myColors <- c("#56ddc5", "#ff3db7", "#4699dd")
ggplot(mtcars, aes(x=mpg, y=hp, col=as.factor(cyl))) + 
  geom_point() +
  scale_color_manual(values=myColors)
_

enter image description here

8
Megatron