2016-04-14 13 views
3

"a"はデータフレームです。異なるラインタイプのggplot2の接続ポイント

set.seed(2) 
a<-data.frame(group= rep(c("A","B","C"),each=4),factor=rep(c(1,1,2,2),3), 
       model=rep(c("old","new"),6),mean=runif(12),sd=runif(12)/10) 

>a 
      group factor model  mean   sd 
     1  A  1 old 0.1848823 0.076051331 
     2  A  1 new 0.7023740 0.018082010 
     3  A  2 old 0.5733263 0.040528218 
     4  A  2 new 0.1680519 0.085354845 
     5  B  1 old 0.9438393 0.097639849 
     6  B  1 new 0.9434750 0.022582546 
     7  B  2 old 0.1291590 0.044480923 
     8  B  2 new 0.8334488 0.007497942 
     9  C  1 old 0.4680185 0.066189876 
     10  C  1 new 0.5499837 0.038754954 
     11  C  2 old 0.5526741 0.083688918 
     12  C  2 new 0.2388948 0.015050144 

ggplot2で「平均±sd」折れ線グラフを描きたいと思います。 私の目的は、画像を描くことです(x軸は "グループ"、y軸は "平均±sd"、異なる "因子"は異なる色を持つ必要があります)、異なる "モデル"は異なる接続線タイプを持つ必要があります破線は、新しいモデルがある実線))私は次のコード使用

library("ggplot2") 
pd <- position_dodge(0.1) #The errorbars overlapped, so use position_dodge to move 
          #them horizontally 
plot<-ggplot(a, aes(x=group, y=mean, colour=as.factor(factor), linetype=model)) + 
    geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=.1, position=pd) + 
    geom_point(position=pd, size=3, shape=21, fill="white") + # 21 is filled circle 
    xlab("Groups") + 
    ylab("Power") + 
    geom_line(position=pd) + 
    scale_linetype_manual(values = c(new = "solid", old = "dashed")) 

enter image description here

が、すべての実線であるべき、との点の間の接続を追加する必要があり、「平均±標準偏差」 。実際には、私はそれがこのようなものにしたい:

enter image description here 私はいくつかのアドバイスを与えることができます、ありがとう!

答えて

3

私は新しいグループ化変数を追加することをお勧めしたい:

a$group2 <- paste(a$factor, a$model, sep="_") 

その後ggplot()からlinetypeを削除し、geom_line()を変更:

ggplot(a, aes(x = group, y = mean, colour = as.factor(factor))) + 
     geom_errorbar(aes(ymin = mean-sd, ymax = mean+sd), 
        width = .1, position = pd) + 
     geom_point(position = pd, size = 3, shape = 21, fill = "white") + 
     xlab("Groups") + 
     ylab("Power") + 
     geom_line(aes(x = group, y = mean, colour = as.factor(factor), 
        group = group2, linetype = model)) + 
     scale_linetype_manual(values = c(new = "solid", old = "dashed")) 

enter image description here

+1

ありがとうございました!良い感じ!しかし、1つの問題があります:同じ色の新しいモデルと古いモデルが重なっている、あなたがこれを処理するのに役立つ可能性があります、ありがとう! @beetroot – lightsnail

+0

たとえば、グループBでは、2つの赤い「平均±sd」が重複していますが、同じx軸に配置しない方が良いです。 – lightsnail

+0

"pd < - position_dodge(1)"と設定すると、あなたのコードを使ったgraghはちょっと変わってきます。 @beetroot – lightsnail

関連する問題