【问题标题】:How can I make 3d plot with stacked 2d plot?如何使用堆叠的 2d 图制作 3d 图?
【发布时间】:2014-06-16 05:09:22
【问题描述】:

我想绘制如下。我试图搜索几个包和绘图函数,但找不到解决方案。

我的数据有四列。

ID  F  R  M
 1  2  3  4
 2  4  6  7
...

我想查看MR 之间关于每个F 值(1、2、3、...)的关系。所以,我希望 F 沿 x 轴,R 沿 y 轴,M 作为 z 轴,如下图所示。

谢谢。

【问题讨论】:

  • 除了搜索你还尝试过什么?您的用例或示例数据集是什么?提供更多信息...
  • 我编辑并解释了更多。谢谢!
  • 这在样本数据集的数据量上似乎有点弱。它不会制作一个非常有趣的图表。我在 Lattice 文本中看到了一些类似的图像,我认为这在 pkg-rgl 中不会特别困难
  • 我会跳过 3D,并使用颜色作为第三维。在您展示的示例中,后面的部分图表已经被前面的图表遮住了。
  • 看看 Stephen Few(受人尊敬的图形专家)在第 17 页关于 3-D 图形所说的遮挡问题:mkt.tableausoftware.com/downloads/TCC08-Keynote-Stephen-Few.pdf@jbaums 对错误问题给出了正确答案(+1给他)。

标签: r plot 3d


【解决方案1】:

你可以用lattice cloud plots 做这种事情,使用来自latticeExtrapanel.3dpolygon

library(latticeExtra)

# generating random data
d <- data.frame(x=rep(1:40, 7), y=rep(1:7, each=40), 
                z=c(sapply(1:7, function(x) runif(40, 10*x, 10*x+20))))

# define the panel function
f <- function(x, y, z, groups, subscripts, ...) {
  colorz <- c('#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', 
              '#fdb462', '#b3de69')
  sapply(sort(unique(groups), decreasing=TRUE), function(i) {
    zz <- z[subscripts][groups==i]
    yy <- y[subscripts][groups==i]
    xx <- x[subscripts][groups==i]    
    panel.3dpolygon(c(xx, rev(xx)), c(yy, yy), 
                    c(zz, rep(-0.5, length(zz))), 
                    col=colorz[i], ...)
  })

}

# plot
cloud(z~x+y, d, groups=y, panel.3d.cloud=f, scales=list(arrows=FALSE))

我确信我不需要在面板函数中循环 groups,但我总是忘记正确的咒语 subscriptsgroups 按预期工作。

正如其他人在 cmets 中提到的那样,这种类型的图可能看起来很时髦,但可能会掩盖数据。

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2022-11-23
    相关资源
    最近更新 更多