0

ggplot2 で geom_errorbar を使用すると、通常の問題が発生します。

エラーバーは範囲内ではありませんが、ここでは問題ありません。

私の問題は、 geom_errorbar が同じデータの信頼区間を、他のデータがプロットされているかどうかに応じて異なる方法でプロットしていることです。

以下のコードは、コメント化されていない SE および AggBar で Audio1 が「300SW」または「3500MFL」に等しいデータのみを通過するデータをフィルタリングします。

SE<-c(0.0861829641865964, 0.0296894376485468, 0.0323219002250762, 
  0.0937013798013447)

AggBar <- structure(list(Report = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 
                                          2L), .Label = c("One Flash", "Two Flashes"), class = "factor"), 
                     Visual = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("one", 
                                                                                      "two"), class = "factor"), Audio = c("300SW", "300SW", "300SW", 
                                                                                                                           "300SW", "3500MFL3500CL", "3500MFL3500CL", "3500MFL3500CL", 
                                                                                                                           "3500MFL3500CL"), Prob = c(0.938828282828283, 0.0611717171717172, 
                                                                                                                                                      0.754141414141414, 0.245858585858586, 0.534484848484848, 
                                                                                                                                                      0.465515151515151, 0.0830909090909091, 0.916909090909091)), .Names = c("Report",
                                                                                                                                                                                                                             "Visual", "Audio", "Prob"), row.names = c(NA, -8L), class = "data.frame")



  #SE<-c(0.0310069159026252, 0.113219880555153, 0.0861829641865964, 0.0296894376485468)

  #AggBar <- structure(list(Report = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 
                                #2L), .Label = c("One Flash", "Two Flashes"), class = "factor"), 
           #Visual = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("one", 
                                                                            #"two"), class = "factor"), Audio = c("300MFL300CL", "300MFL300CL", 
                                                                                                                 #"300MFL300CL", "300MFL300CL", "300SW", "300SW", "300SW", 
                                                                                                                 #"300SW"), Prob = c(0.562242424242424, 0.437757575757576, 
                                                                                                                                    #0.0921010101010101, 0.90789898989899, 0.938828282828283, 
                                                                                                                                    #0.0611717171717172, 0.754141414141414, 0.245858585858586)), .Names = c("Report", 
                                                                                                                                                                                                           #"Visual", "Audio", "Prob"), row.names = c(NA, -8L), class = "data.frame")






prob.bar = ggplot(AggBar, aes(x = Report, y = Prob, fill = Report)) + theme_bw() #+ facet_grid(Audio~Visual)
prob.bar + #This changes all panels' colour
geom_bar(position=position_dodge(.9), stat="identity", colour="black", width=0.8)+
theme(legend.position = "none") + labs(x="Report", y="Probability of Report", title = expression("Visual Condition")) + scale_fill_grey() +
scale_fill_grey(start=.4) + 
scale_y_continuous(limits = c(0, 1), breaks = (seq(0,1,by = .25)))+
facet_grid(Audio ~ Visual)+
geom_errorbar(aes(ymin=Prob-SE, ymax=Prob+SE),
          width=.1, # Width of the error bars
          position=position_dodge(.09))

これにより、次の出力が得られます。

Audio1 = でフィルタした場合の出力

Audio1 変数は、右端の垂直ラベルに表示されます。

ただし、Audio1 が「300SW」または「300MFL」(コメント付きの SE と AggBar) に等しい場合にのみ通過する場所をフィルター処理すると、「300SW 変更」のエラー バーが表示されます。

ここに画像の説明を入力

Audio1 変数は、今回は一番下に「300SW」が付いた一番右の垂直ラベルに表示されます。

Audio1 "300SW" だけをプロットすると、エラー バーが元のプロットと一致するため、この変更は正しくありません。

Audio1 の "300SW" をここに示されていない他の変数でプロットしてみましたが、この変化が発生するのは "300MFL" で提示した場合のみです。

SE 変数の内容を見ると、両方のバージョンのコードで "300SW" の値に変更がないことがわかります。それでも、出力は異なります。

ここで何が起こっているのか理解できません。アイデアや提案は大歓迎です。

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

以下の@Antonios Kは、「300SW」がグリッドの上にある場合、エラーバーが正しく描画されることを強調しています。なぜそうなのかはわかりませんが、エラーバーがバーと誤って一致していると推測しています。

4

2 に答える 2

3

問題は、それSEがデータ フレーム内に格納されていないことです。グローバル環境にただ浮かんでいるだけです。データがファセット化されると (順序の再配置が必要になります)、正しいレコードと整列しなくなります。SEデータ フレームに格納して問題を修正します。

AggBar$SE <- c(0.0310069159026252, 0.113219880555153, 0.0861829641865964, 0.0296894376485468)

ggplot(AggBar, aes(Report, Prob, Report)) +
  geom_bar(stat = "identity", fill = "grey50") +
  geom_errorbar(aes(ymin = Prob - SE, ymax = Prob + SE), width = 0.4) + 
  facet_grid(Audio ~ Visual)
于 2015-08-06T12:30:01.153 に答える
1

エラーバーをプロットするコードは次のとおりです。

geom_errorbar(aes(ymin=Prob-SE, ymax=Prob+SE), width=.1, # Width of the error bars position=position_dodge(.09))

だから、そこに何かがあると思います。あなたが言ったように、SE変数はどちらの場合も同じですが、そこにプロットするのはProb-SEとProb + SEです。また、AggBar$Prob-SE と AggBar$Prob+SE を実行すると、ケースごとに 300SW の異なる値が得られます。

Audio1 値の順序に関係している可能性があります。うまくいった他のケースでは、プロットの上部にも 300SW がありましたか?

試す

sort(unique(DataRearrange$Audio1) )

[1] "300MFL"  "300SW"   "3500MFL"

最初の 2 つを組み合わせると、プロットの下部で 300SW になります。最後の2つを組み合わせると、トップ部分で300SWになります。

したがって、この仮定を確認するには、300MFL と 300SW を組み合わせる 2 番目のケースで、300SW を 1_300SW に置き換えてみて (300SW が上にプロットされるように)、何が起こるかを確認します。ただ行う:

    DataRearrange$Audio1[DataRearrange$Audio1=="300SW"] = "1_300SW"

# Below is the alternative coupling..

ErrorBarsDF <- DataRearrange[(DataRearrange$Audio1=="1_300SW" | DataRearrange$Audio1=="300MFL"), c("correct","Visual1", "Audio1", "Audio2","correct_response", "response", "subject_nr")]
DataRearrange <- DataRearrange[(DataRearrange$Audio1=="1_300SW" | DataRearrange$Audio1=="300MFL"), c("correct","Visual1", "Audio1", "Audio2","correct_response", "response", "subject_nr")]
于 2015-08-06T11:08:06.213 に答える