20

異なるプロットの値に同じ色を固定するにはどうすればよいですか?

2 つの data.frames df1 と df2 があるとします。

library(ggplot2)
library(gridExtra)

set.seed(1)
df1 <- data.frame(c=c('a', 'b', 'c', 'd', 'e'), x=1:5,  y=runif(5))
df2 <- data.frame(c=c('a', 'c', 'e', 'g', 'h'), x=1:5,  y=runif(5))

c をカラー インジケーターとして使用してプロットすると、同じ 5 色が得られます。

g1 <- ggplot(df1, aes(x=x, y=y, fill=c)) + geom_bar(stat="identity")
g2 <- ggplot(df2, aes(x=x, y=y, fill=c)) + geom_bar(stat="identity")
grid.arrange(g1, g2, ncol=2)

ここに画像の説明を入力

しかし、cの同じ値が同じ色になることを望みます。

4

3 に答える 3

19

を使用して、独自の塗りつぶしスケールを設定できますscale_fill_manual。色と「c」のさまざまな値で名前付きベクトルを作成します。

dd <- union(df1$c,df2$c)
dd.col <- rainbow(length(dd))
names(dd.col)  <- dd

それで :

g1 <- ggplot(df1, aes(x=x, y=y, fill=c)) + 
  geom_bar(stat="identity") +
  scale_fill_manual("Legend", values = dd.col)
g2 <- ggplot(df2, aes(x=x, y=y, fill=c)) + 
  geom_bar(stat="identity") +
  scale_fill_manual("Legend", values = dd.col)
grid.arrange(g1, g2, ncol=2)

ここに画像の説明を入力

于 2013-09-28T15:52:29.523 に答える
11

色を計算する別の関数を生成する関数を作成しました。それが良い方法かどうかはわかりません。コメントをお待ちしております。

library(ggplot2)
library(gridExtra)
library(RColorBrewer)

makeColors <- function(){
  maxColors <- 10
  usedColors <- c()
  possibleColors <- colorRampPalette( brewer.pal( 9 , "Set1" ) )(maxColors)

  function(values){
    newKeys <- setdiff(values, names(usedColors))
    newColors <- possibleColors[1:length(newKeys)]
    usedColors.new <-  c(usedColors, newColors)
    names(usedColors.new) <- c(names(usedColors), newKeys)
    usedColors <<- usedColors.new

    possibleColors <<- possibleColors[length(newKeys)+1:maxColors]
    usedColors
  }
} 

mkColor <- makeColors()


set.seed(1)
df1 <- data.frame(c=c('a', 'b', 'c', 'd', 'e'), x=1:5,  y=runif(5))
df2 <- data.frame(c=c('a', 'c', 'e', 'g', 'h'), x=1:5,  y=runif(5))

g1 <- ggplot(df1, aes(x=x, y=y, fill=c)) + geom_bar(stat="identity") + scale_fill_manual(values = mkColor(df1$c))
g2 <- ggplot(df2, aes(x=x, y=y, fill=c)) + geom_bar(stat="identity") + scale_fill_manual(values = mkColor(df2$c))
grid.arrange(g1, g2, ncol=2)

ここに画像の説明を入力

于 2013-09-30T20:27:11.237 に答える