5

次のデータフレームについて考えてみます。

x = read.table(text = 'Lo Re Pe
1 T 33
1 F 22
1 H 11
2 T 22
2 F 22', header = TRUE)

および次のプロット:

qplot(factor(Lo), data=x, geom='bar', fill=Re, weight=Pe, 
      xlab='L', main='Title', ylab='Pe')

ここで、このデータフレームについて考えてみましょう。

x <- read.table(text = 'Lo Re Pe
1 D 33
1 K 22
2 D 22
2 K 22', header=TRUE)

同じqplotステートメントで。

Re値に割り当てられた色はプロット間で一貫していないため、プロットを直接比較することは困難です。

たとえば、値を常に「赤」にし、そのRe値を常に「青」にするように指定するには、データフレームの内容に関係なく、コマンドが常に各値に一貫した色を使用するようにするにはどうすればよいですか。の値には有限で既知の数があるので、それらすべてを指定できます。TReFqplotReRe

データフレームに値が含まれている場合、次のことを試しTましFH

qplot(factor(Lo), data=x, geom='bar', fill=Re, weight=Pe, 
      xlab='Loci', main='Title', ylab='Pe', 
      scale_fill_manual(values=c("Blue","Red","Green"),labels=c("T","F","H")))

しかし、Rは誤った長さに関するエラーを報告し、プロットを生成しません。

Reこのソリューションでは、すべての可能な値がデータフレームに存在しない場合でも、すべての可能な値に色を指定できるのが理想的です。

4

1 に答える 1

6

これは、のモジュラー性を使用して完全に可能ですggplot。ただし、ドロップqplotして、を使用するように切り替えることをお勧めしますggplot()。それはあなたに何の費用もかからず、「複雑な」ことをするのにより適しているので、長期的にはより便利になるでしょう。

2つのデータセットから始めましょう。

x1 = read.table(text = 'Lo Re Pe
1 T 33
1 F 22
1 H 11
2 T 22
2 F 22', header = TRUE)

x2 <- read.table(text = 'Lo Re Pe
1 D 33
1 K 22
2 D 22
2 K 22', header=TRUE)

これが最初のプロットですが、次のように翻訳されggplot()ます:

p <- ggplot(x1,aes(x = factor(Lo))) + 
        geom_bar(aes(fill = Re,weight = Pe)) + 
        labs(x = 'L',y = 'Pe') + 
        opts(title = 'Title')

プロット間で色の一貫性を保ち、未使用の色が凡例に表示されないようにするために、マスターカラーキーを作成し、必要なサブセットのみをスケールに渡します。

color_key <- c('red','blue','green','black','orange')
#If Re is a character variable:
names(color_key) <- unique(c(x1$Re,x2$Re))
#If Re is a factor:
names(color_key) <- unique(c(as.character(x1$Re),as.character(x2$Re)))

(この関数を使用して同様のことを行うこともできますがlevels、データセットに表示されないレベルが含まれないようにしたかったのです。)

もちろん、好きな色を選ぶことができます。これで、関連するセグメントのみを渡すことでfill、プロットのスケールをカスタマイズできます。pcolor_keyscale_fill_manual

p + scale_fill_manual(values = color_key[names(color_key) %in% x1$Re])

ここに画像の説明を入力してください

さらに、プロットがすべて実際に同じ構造である場合は、ggplot呼び出しを何度も複製する必要はありません。pプロットを新しいデータセットに適用するだけです。

p1 <- p %+% x2

fill次に、同じ方法でスケールを追加します。

p1 + scale_fill_manual(values = color_key[names(color_key) %in% x2$Re])

ここに画像の説明を入力してください

最後に、新しいデータセットを組み合わせてみましょう。

x3 <- rbind(x1[1:2,],x2[3:4,])

同じプロセスが再び機能します:

p3 <- p %+% x3
p3 + scale_fill_manual(values = color_key[names(color_key) %in% x3$Re])

ここに画像の説明を入力してください

于 2012-07-06T14:33:10.763 に答える