1

私は ggplot2 が初めてで、答えが見つからないという質問があります。説明に役立つように、次のおもちゃのデータを作成しました。

data <- data.frame(tech=c(rep(letters[1:15],2)), 
     sep=c(rep(c("SitutationA", "SitutationB"),each=15)), 
     error=c(runif(15,min=-0.2, max=0.5), runif(15, min=0.3, max=1)))

geom_barを使用して、2 つの異なる状況 (SituationA と SituationB) に分割された各テクニック "tech" (軸 x) の "error" (軸 y) を示すグラフをプロットしたいと考えていますfacet_grid。各バーの色 ( fill) は、テクニックではなく、各テクニックの「エラー」を表す必要があります (要因として)。状況 A と B のエラーは、異なるスケールで測定されます。ただし、私のコードでは、同じ値のエラーは両方の状況で同じ色になります。それらは異なるスケールで測定されたため、この動作は望ましくありません。したがって、シチュエーション A とシチュエーション B の色が独立していることを望みます。

次のコードはグラフをプロットしますが、両方の状況で同じ色を使用します。

ggplot(data, aes(x=tech, y=error)) +
  geom_bar(aes(fill=error), stat="identity", position="dodge") + 
  facet_grid(sep ~ ., scales="free_y") + 
  scale_fill_continuous(guide=FALSE)

各ファセット (状況 A と状況 B) に異なる連続塗りつぶしを使用するにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

1

同じプロットに2つの異なる塗りつぶしスケールを設定することはできません。

grid.arrange()この問題の解決策は、2つのプロットを作成し、それらをライブラリからまとめることgridExtraです。

最初のプロットでは、の値のみを入力しますSitutationA。yスケールを変更して、小数点以下2桁の値を表示するようにしました(2番目のプロットの場合と同じになります)。x軸のタイトル、テキスト、目盛りを削除し、プロットの余白を変更しました。プロット間のスペースを減らすために、下部の余白を-0.4に設定します。

library(grid)
library(gridExtra)
p1<-ggplot(subset(data,sep=="SitutationA"), aes(x=tech, y=error)) +
  geom_bar(aes(fill=error), stat="identity", position="dodge") + 
  facet_grid(sep ~ ., scales="free_y") + 
  scale_fill_continuous(guide=FALSE)+
  scale_y_continuous(breaks=c(0,0.25,0.50))+
  theme(axis.text.x=element_blank(),
        axis.title.x=element_blank(),
        axis.ticks.x=element_blank(),
        plot.margin=unit(c(1,1,-0.4,1),"lines"))

2番目のプロット(SitutationB)では、プロット間のスペースを減らすために、上部のプロットマージンを-0.4に変更しました。その後、変更されscale_fill_continuous()、新しい色が提供されました。

p2<-ggplot(subset(data,sep=="SitutationB"), aes(x=tech, y=error)) +
  geom_bar(aes(fill=error), stat="identity", position="dodge") + 
  facet_grid(sep ~ ., scales="free_y") + 
  scale_fill_continuous(guide=FALSE,low="red",high="purple") +
  theme(plot.margin=unit(c(-0.4,1,1,1),"lines"))

次に、両方のプロットをまとめます。

grid.arrange(p1,p2)

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

于 2013-03-19T06:02:14.393 に答える