2016-06-29 4 views
2

私は、共通の変数を共有する異なるデータフレームのデータを使用して、複数のバープロットにわたって一貫したcolour schemeを使用しています。このアプローチは、this questionへの回答に基づいていました。これらのケースのそれぞれで、私は1つの変数を見ていました。一貫したカラースキームのサイドバイサイドバープロット

ここで私がしたいのは、同じプロット上の2つの変数を見て、カラースキームを一致させておくことです。これは、同じ色(パレットの最初)、Bのための2つのバーが同じ色(パレットにおける第二)、など enter image description here

あるべきである必要があります Aのための2つのバーを除いて、次のようになります

サンプルデータ:

mydata <- data.frame("Channel" = LETTERS[1:11], 
        "V1" = seq(1100, 100, -100), 
        "V2"= seq(110, 10, -10)) 

以上のプロットのためのコード:

barplot(t(mydata[,2:3]), beside=T, 
    col=brewer.pal(11, "RdGy"), 
    names.arg=LETTERS[1:11]) 

私は(私の好みである)ggplotでこれをやろうとしてきたが、成功していません。私はreshape2からmeltまでのデータを使用してからfillを使用しましたが、それは2色しか得られません。私はまた、position='dodge'をさまざまな方法で使ってみました。 2番目の変数の棒グラフと折れ線グラフを組み合わせて同様の最終結果を得ることができますが、2重棒グラフを好むでしょう。

また、ggplotを使用することをお勧めしますが、どのような解決策も認められます。

+0

のコード例では、「高さ」 '誤差を与えるベクトルまたは申し訳ありませんとキャッチしてくれてありがとう@dww matrix' – dww

+0

でなければなりません。私は 'ggplot2'モードで立ち往生し、引数を行列に変換しませんでした。 – pentandrous

答えて

2

少しハックして解決しました。私はChannelfamilyvariablesに色を設定しました。第2のものは、position = "dodge"を使用したときに、同じChannelの両方がお互いの上にプロットされるのを防ぎます。

library(ggplot2) 
library(reshape2) 
library(dplyr) 

mydata <- data.frame("Channel" = LETTERS[1:11], 
         "V1" = seq(1100, 100, -100), 
         "V2"= seq(110, 10, -10)) 

df <- mydata %>% 
     melt(id = c("Channel")) 

ggplot(df, aes(x = Channel, y = value, fill = Channel, family = variable)) + 
    geom_bar(stat = "identity", position = "dodge", color = "black") + 
    scale_fill_brewer(palette = "RdGy") 

enter image description here

あなたは別のテーマを使用することができ、背景を好きではない場合。たとえば、ggthemesパッケージのtheme_base()は、あなたと同じように見えるはずですbarplot

+0

恐ろしい、ありがとう!ちょうど私が必要なもの。そして、「ggplot」は私が望んでいたアプローチでした。 – pentandrous

1

隣接するバーごとに繰り返す色を指定することで、ベースグラフィックを使用できます。

barplot(t(mydata[,2:3]), beside=T, col=rep(brewer.pal(11, "RdGy"), each=2), names.arg=LETTERS[1:11]) 

enter image description here

+0

ありがとう!複数のオプションがあるのは常に良いことです。このコードはもう少し簡単です。 – pentandrous

関連する問題