1

1 つのデータセットから複数の平行座標プロットをプロットしたいと考えています。現在、私は4つのオブジェクトを生成する実用的なソリューションを持っていsplitます。これを解決したい、またはよりコンパクトなレイアウトと単一の凡例を使用したいと考えています。これは可能ですか?l_plyggplot2facet_wrapfacet_grid

通常のggplot2オブジェクト (boxplot) では facet_wrap は完全に機能します。GGally関数を使用ggparcoord()すると、エラーが発生しますError in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting

私は何を間違っていますか?

require(GGally)
require(ggplot2)
# Example Data
x <- data.frame(var1=rnorm(40,0,1),
                var2=rnorm(40,0,1),
                var3=rnorm(40,0,1),
                type=factor(rep(c("x", "y"), length.out=40)),
                set=factor(rep(c("A","B","C","D"), each=10))
                )
# this works
p1 <- ggplot(x, aes(x=type, y=var1, group=type)) + geom_boxplot()
p1 <- p1 + facet_wrap(~ set)
p1 
# this does not work
p2 <- ggparcoord(x, columns=1:3, groupColumn=4) 
p2 <- p2 + facet_wrap(~ set)
p2 

どんな提案でも大歓迎です!ありがとうございました!

4

1 に答える 1

4

この関数は、この関数の呼び出しで指定された列のみをデータとして使用するため、関数facet_wrap()で直接使用することはできません。ggparcoord()のデータ要素を見るとわかりますp2。という名前の列はありませんset

 p2 <- ggparcoord(x, columns=1:3, groupColumn=4)
 head(p2$data)
  type .ID anyMissing variable       value
1    x   1      FALSE     var1  0.95473093
2    y   2      FALSE     var1 -0.05566205
3    x   3      FALSE     var1  2.57548872
4    y   4      FALSE     var1  0.14508261
5    x   5      FALSE     var1 -0.92022584
6    y   6      FALSE     var1 -0.05594902

ファセットを使用して同じタイプのプロットを取得するには、最初に新しい列 (ケースの数に対応する数字のみを含む) を既存のデータ フレームに追加してから、このデータ フレームを再形成する必要があります。

x$ID<-1:40
df.x<-melt(x,id.vars=c("set","ID","type"))

次に、関数ggplot()とを使用geom_line()してデータをプロットします。

ggplot(df.x,aes(x=variable,y=value,colour=type,group=ID))+
   geom_line()+facet_wrap(~set)

ここに画像の説明を入力

于 2013-01-31T12:02:05.420 に答える