2011-03-07 44 views
3

我最近开始使用R语言,现在我在大部分二维图上使用R.现在,我想用R生成三维图。我有来自工具的x,y,z数据,直到现在我在gnuplot中使用splot来生成曲面图。我想用R生成一个类似于gnuplot中给出的一个splot的表面图。我看到的问题是,为了生成3D图R需要数据为矩阵格式,但我的数据不是这种格式。我的问题是,如果gnuplot能够从数据中产生一个图表,为什么R不能这样做。我相信我缺少的东西,请大家帮我R的表面图类似于gnuplot的表面

这里是gnuplot的情节

Surface plot from GNU plot

这是数据

17.46 537.74 0.8 
18.36 537.74 1.6 
19.26 537.74 1.3 
19.395 537.74 1.7 
21.015 537.74 1.9 
35.46 475.26 1.2 
36.36 475.26 0.8 
37.395 475.26 0.9 
39.96 475.26 0.6 
43.56 475.26 1 
+0

如果您描述您当前的数据格式,理想情况下使用一个可重现的小例子,这将有所帮助。另外,您使用哪个R函数来绘制数据? – Andrie 2011-03-07 13:37:36

+0

有许多绘制曲面的功能。编辑你的问题,可能有一个你想制作的图形的链接或图像。在等待文件上传时,请查看http://addictedtor.free.fr/graphiques/thumbs.php?sort=package是否有用。 – 2011-03-07 14:01:30

回答

3

这不是什么秘密,我是一个raster封装风扇。它带有一个使用rgl包的绘图方法。这些图像可以相当充分。

这是从?raster::plot3D enter image description here

EDIT

的实例以下是如何使用矩阵具有三列来绘制一个表面的例子。这个例子看起来像死亡战斗中的舞台死亡陷阱。如果你正在寻找内核平滑,那么这是值得自己的问题。

library(rgl) 
library(raster) 
x <- sample(-500:500, 1000, replace = TRUE) 
y <- sample(-500:500, 1000, replace = TRUE) 
z <- rnorm(500, 10, 20) 
df <- cbind(x, y, z) 

rst <- raster(ncols = 100, nrows = 100, xmn = -100, xmx = 100, ymn = -100, ymx = 100) 
rst2 <- rasterize(x = df[,1:2], y = rst, df[, 3]) 
plot3D(rst2) 

enter image description here

+0

这看起来非常好,希望它不需要矩阵形式的数据。我会尝试这个,我有一些问题与rgl包(http://stackoverflow.com/questions/5166175/help-in-using-rgl-package),不知道它是否适用于我。当数据不是矩阵格式时,是否有任何其他包用于生成曲面图? – SAN 2011-03-07 17:31:23

+0

您可以直接使用'rgl :: surface3d'。它接受你在你的问题中描述的那种数据(三列矩阵)。 – 2011-03-07 22:31:52

+0

surface3d还需要一个z矩阵为每个网格点,我得到这个错误与上述数据 y长度!= x行* Z色谱 – SAN 2011-03-08 01:05:52

1

可以使用outer函数生成矩阵函数:

fn3d <- function(x,y) x^2-y^2 
persp(outer(seq(-10,10,length=30),seq(-10,10,length=30),fn3d)) 

看看?persp,那里有很多例子。如果您想要交互式3D绘图,请考虑安装包装rgl

+0

数据生成器是一个模拟工具,我没有功能 – SAN 2011-03-07 16:18:28

+0

@Aki你只有一些数据点在这里。看来其余的情节在gnuplot中充满了插值平面。您可能需要考虑是否有合适的方式来表示数据。 – James 2011-03-07 17:00:28

+0

实际点数以百万为单位,例如,我用了几个数据点 – SAN 2011-03-07 17:27:02

0

在晶格包的线框和levelplot函数使用的数据格式等gnuplot在而非requireing的矩阵。