2

sciplotエラーバーを手動で計算する必要がないため、実験データに使用するのが大好きです。過去に、次のように 2 つの因子変数をグループ化するために使用しました。

plot1<-bargraph.CI(
  df$factor1,   #categorical factor for the x-axis
  df$y,         #numerical DV for the y-axis
  df$factor2    #grouping factor
)

ただし、現在、3 つの因子変数をグループ化する必要があります。sciplotドキュメントは、これが不可能であることを示していますsciplot.

それで、今、尋ねるのに必要な時が来ました...どうやってこれを行うのggplot2ですか?具体的には、3 つの因子変数を超えるエラーバーを含むグラフを生成する節約的な方法はありますか? 私は Web を調べましたが、洗練されたソリューションを見つけることになると、不足し続けます。

以下のサンプルデータ:

factor1          factor2             factor3     y
More expensive   Least important     Blue        1
Less expensive   Most important      Blue        0
Same cost        Least important     Red         1
More expensive   Least important     Red         0
Less expensive   Most important      Red         1
Same cost        Least important     Blue        1
More expensive   Least important     Red         1
Less expensive   Least important     Blue        0
Same cost        Most important      Red         1
4

2 に答える 2

3

sciplotへの2 つの呼び出しを使用して (ある程度) 複製できますstat_summary

interaction( を使用interaction) またはファセットを使用して、2 つの因子レベルを組み込むことができます。

ToothGrowthベース R のデータセット パッケージに同梱されているを使用します。

# add third factor
ToothGrowth$F3 <- letters[1:2]
# coerce dose to a factor
ToothGrowth$dose <- factor(ToothGrowth$dose, levels = c(0.5,1,2))

# interaction on the x axis
 ggplot(ToothGrowth, aes(y = len, x = interaction(supp, F3))) + 
  stat_summary(fun.y = 'mean', fun.ymin = function(x) 0, geom = 'bar', 
    aes(fill =dose), position = 'dodge') +
  stat_summary(fun.ymin = function(x) mean(x) - sd(x), 
    fun.ymax = function(x) mean(x) + sd(x),  position ='dodge', 
    geom = 'errorbar', aes(group = dose))

ここに画像の説明を入力

# facetting on the third factor
ggplot(ToothGrowth, aes(y = len, x = supp )) + 
  stat_summary(fun.y = 'mean', fun.ymin = function(x) 0, geom = 'bar', 
   aes(fill =dose), position = 'dodge') +
  stat_summary(fun.ymin = function(x) mean(x) - sd(x), 
               fun.ymax = function(x) mean(x) + sd(x), position ='dodge', 
               geom = 'errorbar', aes(group = dose))+
  facet_wrap(~F3)

ここに画像の説明を入力

ggplot(ToothGrowth, aes(y = len, x = supp)) + 
  stat_summary(fun.y = 'mean', fun.ymin = function(x) 0, 
               geom = 'bar', aes(fill =interaction(dose, F3)), 
               position = 'dodge') +
  stat_summary(fun.ymin = function(x) mean(x) - sd(x), 
               fun.ymax = function(x) mean(x) + sd(x), 
               position ='dodge', geom = 'errorbar', 
               aes(fill =interaction(dose, F3)))

ここに画像の説明を入力

于 2013-04-22T02:17:20.097 に答える
2

実際、これsciplot で可能です。以下は、グループ化要因をリストとして指定する最初のソリューションと、ggplot からファセット ソリューションを複製する 2 つのソリューションです。

library(sciplot)

## add third factor as in above example
ToothGrowth$F3 <- letters[1:2]

## Adding group as a list
bargraph.CI(response=len, x.factor=supp, group=list(dose, F3),
            data=ToothGrowth, legend=TRUE, x.leg=14, xlim=c(0,19),
            err.width=0.025)

出力

## Using "panels"
par(mfrow=c(1,2), xpd=NA)
bargraph.CI(response=len, x.factor=supp, group=dose, data=ToothGrowth,
            subset=F3=="a", xlab="a", cex.lab=1.25,
            legend=TRUE, x.leg=7.5, err.width=.025)
bargraph.CI(response=len, x.factor=supp, group=dose, data=ToothGrowth,
            subset=F3=="b", xlab="b", cex.lab=1.25, err.width=.025)

出力

于 2014-11-23T15:14:49.597 に答える