2016-08-17 17 views
0

私は正しいタイトル/質問を策定すればわかりません。たぶん私の問題の1つは、私の語彙の用語が欠けているかもしれません。ごめんなさい。しかし、試してみてください:Rの3次元プロットで複数の2次元プロットを描くには?

私はデータを持っています(この例ではsleep)私は3次元として記述します。実際の統計家はそれをしないだろうか?

私は複数の2次元プロットを3次元プロットに描画したいと考えています。私はそれらを並んでプロットしたい。私が間違っていれば私を修正してください。ここ

enter image description here

私の問題は、唯一のラインがあるということです。 2つのグループがあります。グループごとに1つの行が必要です。 type='h'と同じデータがより良い説明を与える私は思う:

enter image description here

はあなたがここに2行を想像できますか?私はそのコンセプトで何が欠けているのですか? 印刷/出版用に別のプロットライブラリを使用することもできます。現在、どちらが私にとって問題ではありません。たぶん私は間違った場所にいるのでしょうか?

これはコードです:

require('mise') 
require('scatterplot3d') 
mise() # clear the workspace 

# example data 
print(sleep) 

scatterplot3d(x=sleep$ID, 
       x.ticklabs=levels(sleep$ID), 
       y=sleep$group, 
       y.ticklabs=levels(sleep$group), 
       lab = c(length(unique(sleep$ID)), 1), 
       z=sleep$extra, 
       type='o') 

とデータ

extra group ID 
1 0.7  1 1 
2 -1.6  1 2 
3 -0.2  1 3 
4 -1.2  1 4 
5 -0.1  1 5 
6 3.4  1 6 
7 3.7  1 7 
8 0.8  1 8 
9 0.0  1 9 
10 2.0  1 10 
11 1.9  2 1 
12 0.8  2 2 
13 1.1  2 3 
14 0.1  2 4 
15 -0.1  2 5 
16 4.4  2 6 
17 5.5  2 7 
18 1.6  2 8 
19 4.6  2 9 
20 3.4  2 10 

答えて

1

次の2つの手順で手動で行を追加することができます。

# Store the plot in rr 
rr <- scatterplot3d(x=as.numeric(sleep$ID), 
        x.ticklabs=levels(sleep$ID), 
        y=sleep$group, 
        y.ticklabs=levels(sleep$group), 
        z=sleep$extra) 
# find all that belong to group one 
idx = sleep$group == 1 
# add the first line 
rr$points3d(x = sleep$ID[idx], y = rep(1, each = sum(idx)), z = sleep$extra[idx], type = 'l', col = 'red') 
# add the second line 
rr$points3d(x = sleep$ID[!idx], y = rep(2, each = sum(!idx)), z = sleep$extra[!idx], type = 'l', col = 'blue') 

をので、リボンの代わりに、行を追加します物事は少し変わる。特に、リボンはpolygon機能でプロットされています。ただし、この関数は2D座標のみを扱うため、3D座標を関数rr$xyz.convertで2D座標に変換する必要があります。

rr <- scatterplot3d(x=sleep$ID, 
        x.ticklabs=levels(sleep$ID), 
        y=sleep$group, 
        y.ticklabs=levels(sleep$group), 
        z=sleep$extra) 
idx = sleep$group == 1 
# draw first group 
mat = matrix(c(rep(sleep$ID[idx], 2), 
       rep(c(1, 1.05), each = sum(idx)), # 1.05 determines width 
       rep(sleep$extra[idx], 2)), ncol = 3) 
ll = rr$xyz.convert(mat) 
polygon(x = ll$x[c(1:10, 20:11)], 
     y = ll$y[c(1:10, 20:11)], col = 'red') 
# draw second group 
mat = matrix(c(rep(sleep$ID[!idx], 2), 
       rep(c(2, 1.95), each = sum(!idx)), # 1.95 determines width 
       rep(sleep$extra[!idx], 2)), ncol = 3) 
ll = rr$xyz.convert(mat) 
polygon(x = ll$x[c(1:10, 20:11)], 
     y = ll$y[c(1:10, 20:11)], col = 'blue') 
+0

これは私の主観に完全に適合しませんが、どのようにこれらの2本の線をリボンとして描くのでしょうか? IMOはここでの解決策はよく見えず、実際にデータを理解するのに役立たない。 – buhtz

+0

プロットをどのように見せたいかの例を挙げることはできますか?おそらくこのようなものですが、2行しかないでしょうか? http://i.stack.imgur.com/kBINP.png – Vandenman

+0

はい、これはいいですね。 – buhtz

関連する問題