绘制标量场

时间:2014-07-27 16:51:38

标签: r

我正在寻找一种方法将此函数绘制为标量场,特别是连续标量场:

library(rgl)

points = seq(-2, 0, length=20)

XY = expand.grid(X=points,Y=-points)
Zf <- function(X,Y){
     X^2-Y^2;
     }
Z <- Zf(XY$X, XY$Y)

open3d()
rgl.surface(x=points, y=matrix(Z,20), coords=c(1,3,2),z=-points)
axes3d()

标量字段通常用两个轴X和Y绘制,其中Z用颜色表示(http://en.wikipedia.org/wiki/Scalar_field

使用ggplot()我可以这样做:

daf=data.frame(XY$X,XY$Y,Z)

ggplot(daf)+geom_point(aes(XY.X,XY.Y,color=Z))

enter image description here

但仍然不是一个连续的领域。

1 个答案:

答案 0 :(得分:1)

这可以通过'image'功能来实现:

div.article div.description {
  display: none;
}

div.article.current div.description {
  display: block;
}

scalar field

此方法仅使用最近邻插值,但如果您想要更平滑的表示,则可以使用其他类型的插值:

Z <- outer(points, points, Zf)
image(points, points, Z)

Linear interpolation

library(fields)

# Bilinear interpolation
interp_points = seq(-2, 0, length = 200)
interp_bilinear <- interp.surface(list(x = X, y = Y, z = Z), 
                                  loc = expand.grid(interp_points, interp_points))

image(interp_points, interp_points, matrix(interp_bilinear, 200, 200))

Bicubic interpolation

当您观察较少或功能较多的行为时,不同插值方案之间的差异会变得更加清晰:

comparison