我正在寻找一种方法将此函数绘制为标量场,特别是连续标量场:
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))
但仍然不是一个连续的领域。
答案 0 :(得分:1)
这可以通过'image'功能来实现:
div.article div.description {
display: none;
}
div.article.current div.description {
display: block;
}
此方法仅使用最近邻插值,但如果您想要更平滑的表示,则可以使用其他类型的插值:
Z <- outer(points, points, Zf)
image(points, points, Z)
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))
当您观察较少或功能较多的行为时,不同插值方案之间的差异会变得更加清晰: