如何在R的3d图中绘制多个2d图? [英] How to draw multiple 2d-plots in a 3d-plot in R?

查看:42
本文介绍了如何在R的3d图中绘制多个2d图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不确定我的标题/问题是否正确.也许我的问题之一是我的词汇表中缺少术语.对不起.但是让我们试试:

I am not sure if I formulated the title/question correct. Maybe one of my problems are missing terms in my vocabulary. Sorry. But lets try:

我有数据(在本例中为sleep),我将其描述为三维数据.也许真正的统计学家不会这样做?

I have data (sleep in this example) I would describe as three-dimensional. Maybe a real statistican wouldn't do that?

我想我想将多个二维图绘制成一个三维图.我想并排绘制它们.如果我错了,请纠正我.

I think I want to draw multiple two-dimensional plots into a three-dimensial one. I want to plot them side by side. Please correct me if I am wrong.

我的问题是只有一行.有两组.我想要每组一行.我认为 type='h' 的相同数据给出了更好的描述:

My problem here is that there is only one line. There are two groups. I want one line per group. The same data with type='h' give a better description I think:

你能想象这里的两行吗?我在那个概念中缺少什么?我们可以使用另一个绘图库进行打印/出版.目前,哪个对我来说并不重要.也许我完全在错误的地方?

Can you imagine the two lines here? What I am missing in that concept? We could use another ploting library for printing/publication. Currently it doesn't matter for me which one. Maybe I am totaly at the wrong place?

这是代码:

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

推荐答案

您可以分两步手动添加行:

You could add the lines manually in two steps:

# 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 坐标,所以我们需要使用 rr$xyz.convert 函数将我们的 3D 坐标转换为 2D 坐标.

So to add ribbons instead of lines things change a bit. In particular, the ribbons are plotted with the polygon function. However, this function only handles 2D coordinates, so we need to transform our 3D coordinates to 2D coordinates with the function 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')

这篇关于如何在R的3d图中绘制多个2d图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆