0

タイトル/質問を正しく作成したかどうかはわかりません。たぶん、私の問題の 1 つは、語彙に用語が含まれていないことです。ごめん。しかし、試してみましょう:

sleep3 次元として説明するデータ (この例では) があります。多分本当の統計学者はそれをしないでしょうか?

複数の 2 次元プロットを 3 次元プロットに描画したいと考えています。それらを並べてプロットしたい。間違っている場合は修正してください。

ここに画像の説明を入力

ここでの問題は、1 行しかないことです。2 つのグループがあります。グループごとに 1 行が必要です。同じデータでtype='h'より良い説明が得られると思います:

ここに画像の説明を入力

ここの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
4

1 に答える 1

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 座標を 2D 座標に変換する必要がありますrr$xyz.convert

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')
于 2016-08-17T07:26:41.893 に答える