【问题标题】:3d plot in R - PatchR 中的 3d 绘图 - 补丁
【发布时间】:2011-11-25 23:17:03
【问题描述】:

我在数据框中有以下数据:

**x** in (0,1)
**y** in [0,1]
**z** in [0,1]

例如:

X,Y,Z
0.1, 0.2, 0.56
0.1, 0.3, 0.57
...

我想在这种类型的图表上绘制它们:

我尝试了 R,但我只能得到一个 not-so-fancy 3d scatterplot。 我还阅读了有关lattice 3d wireframe 的信息,但我无法理解它。

我应该怎么做才能在 R 中获得类似 Matlab 的线框? 涉及哪些数据转换?

这是文档中的示例代码:

x <- seq(-pi, pi, len = 20)
y <- seq(-pi, pi, len = 20)
g <- expand.grid(x = x, y = y)
g$z <- sin(sqrt(g$x^2 + g$y^2))
wireframe(z ~ x * y, g, drape = TRUE,
aspect = c(3,1), colorkey = TRUE)

我觉得不是特别清楚。

编辑:persp3d 函数工作正常,我能够生成具有一种颜色的 3d 图。如何设置相对于 z 值的色阶?

感谢您的任何提示, 木龙

【问题讨论】:

  • 确实需要一点练习才能将 (x,y,z) 数据转换为用于线框或其他 3-d 网格绘图工具的 z 值矩阵。学习转换是值得的,因为一旦你知道如何转换,你就永远不会忘记:-)。您可能会喜欢 scatterplot3d 包,它允许绘制线网格图。
  • 这是未经测试的,因此它将作为评论而不是答案。我会推荐with(mydata,persp(x=sort(unique(X)),y=sort(unique(Y)),z=matrix(Z,ncol=length(unique(x)))))——我不太确定我是否按照正确的顺序组织了矩阵(可能是byrow=TRUE 等)
  • 查看 example(wireframe) 和 example(persp) 并检查它是否符合您的需求。
  • 我一直没有时间思考这个问题,但请看这里的代码:addictedtor.free.fr/graphiques/graphcode.php?graph=23

标签: r matlab 3d lattice wireframe


【解决方案1】:

使用outer 创建z 值,然后使用persp 进行绘图:

z <- outer(x,y, function(x,y) sin(sqrt(x^2+y^2)))
persp(x,y,z)

有用于着色和设置视角的选项,请参阅?persp。有关 Matlab 样式着色,请参见第四个示例。

对于交互式绘图,请考虑在 rgl 包中使用 persp3d:

require(rgl)
persp3d(x,y,z,col="blue")

编辑

要添加颜色,与persp中的方法略有不同,因为颜色与顶点有关,而不是与面的中心有关,但它更容易。

jet.colors <- colorRampPalette( c("blue", "green") ) 
pal <- jet.colors(100)
col.ind <- cut(z,100) # colour indices of each point
persp3d(x,y,z,col=pal[col.ind])

帮助文件建议添加参数smooth=FALSE,但这取决于个人喜好。

【讨论】:

  • 你能附上结果的图片吗?
  • 这个答案的问题是它假设 z = f(x,y)。 OP 说他有一组有序的三元组 (x,y,z),在这种情况下,他需要生成一个拟合函数。当然,这不会绘制确切的原始数据。
  • @Mulone 我已经包含了将基于高度的颜色添加到persp3d 图的示例。
猜你喜欢
  • 2012-07-17
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 2017-07-15
  • 1970-01-01
相关资源
最近更新 更多