通过点阵中的点绘制二次样条

Mat*_*erg 7 r lattice

基于这个伟大的问题:如何绘制通过某些点的平滑曲线

如何在格子中做到这一点?

plot(rnorm(120), rnorm(120), col="darkblue", pch=16, xlim=c(-3,3), ylim=c(-4,4))
points(rnorm(120,-1,1), rnorm(120,2,1), col="darkred", pch=16)
points(c(-1,-1.5,-3), c(4,2,0), pch=3, cex=3)
xspline(c(-1,-1.5,-3), c(4,2,0), shape = -1)
Run Code Online (Sandbox Code Playgroud)

看起来应该是这样的:

这是类似的数据,格式更合适的lattice情节:

dat <- data.frame(x=c(rnorm(120), rnorm(120,-1,1)),
                  y=c(rnorm(120), rnorm(120,2,1)),
                  l=factor(rep(c('B','R'),each=120))
)
spl <- data.frame(x=c(-1,-1.5,-3), 
                  y=c(4,2,0)
)
Run Code Online (Sandbox Code Playgroud)

以下是链接问题给出的内容,翻译为lattice:

xyplot(y ~ x,
       data=dat,
       groups=l,
       col=c("darkblue", "darkred"),
       pch=16,
       panel = function(x, y, ...) {
         panel.xyplot(x=spl$x, y=spl$y, pch=3, cex=3)
         ## panel.spline(x=spl$x, y=spl$y)              ## Gives an error, need at least four 'x' values
         panel.superpose(x, y, ...,
                         panel.groups = function(x, y, ...) {
                           panel.xyplot(x, y, ...)
                         }
         )
       },
       xlim=c(-3,3), ylim=c(-4,4)
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Jos*_*ien 4

这是基本图形解决方案到点阵的逐行“翻译” 。(翻译的直接性是由 latticeExtra+包提供的运算符实现的。有关其用法的详细信息,请参阅 。)?layer

最后一行调用基本图形函数的grid.xspline()精确网格模拟。xspline()

library(lattice)
library(grid)
library(latticeExtra)

xyplot(rnorm(120)~rnorm(120), pch=16, col="darkblue", 
       xlim = c(-3.1, 3.1), ylim = c(-4.1, 4.1)) +
xyplot(rnorm(120,2,1) ~ rnorm(120,-1,1), pch=16, col="darkred") +
xyplot(c(4,2,0) ~ c(-1,-1.5,-3), pch=3, cex=3) +
layer(grid.xspline(c(-1,-1.5,-3), c(4,2,0), shape = -1, default.units="native"))
Run Code Online (Sandbox Code Playgroud)

网格的一个特殊细节确实在上面的最后一行中弹出:与其他几个低级线条绘制函数一样,grid.xspline()默认为单位,而不是许多其他函数用作默认值的"npc"通常所需的单位。显然,这很容易足以改变——一旦你意识到这一点!)"native"grid.points()grid.*()

在此输入图像描述