当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R xspline 绘制 X 样条线


R语言 xspline 位于 graphics 包(package)。

说明

绘制X-spline,一条相对于控制点绘制的曲线。

用法

xspline(x, y = NULL, shape = 0, open = TRUE, repEnds = TRUE,
        draw = TRUE, border = par("fg"), col = NA, ...)

参数

x,y

包含多边形顶点坐标的向量。有关替代方案,请参阅xy.coords

shape

值介于 -1 和 1 之间的数值向量,用于控制样条线相对于控制点的形状。

open

指示样条曲线是开放形状还是封闭形状的逻辑值。

repEnds

对于开放X-splines,一个逻辑值,指示是否应复制第一个和最后一个控制点来绘制曲线。因关闭X-splines而被忽略。

draw

逻辑:应该绘制X-spline吗?如果为 false,则返回一组用于绘制曲线的线段,并且不绘制任何内容。

border

绘制曲线的颜色。使用border = NA 省略边框。

col

填充形状的颜色。默认值 NA 不填充。

...

graphical parameters 例如 ltyxpdlendljoinlmitre 可以作为参数给出。

细节

X-spline 是相对于控制点绘制的线。对于每个控制点,直线可能穿过(插值)控制点,也可能仅接近(近似)控制点;行为由每个控制点的形状参数确定。

如果形状参数大于零,样条曲线将逼近控制点(当形状为 1 时,与三次方 B-spline 非常相似)。如果形状参数小于零,则样条曲线会对控制点进行插值(并且与形状为 -1 时的 Catmull-Rom 样条曲线非常相似)。如果形状参数为 0,则样条线在该控制点处形成尖角。

对于开放X-splines,起始和结束控制点的形状必须为 0(并且非零值会自动转换为零)。

对于打开的X-splines,默认情况下,在绘制曲线之前复制开始和结束控制点。在每组四个控制点的第二个和第三个之间绘制一条曲线(插值或近似),因此此默认行为可确保生成的曲线从您指定的第一个控制点开始,到最后一个控制点结束。可以通过 repEnds 参数关闭默认行为。

如果 draw = TRUENULL 则为包含元素 xy 的列表,可以将其传递给 linespolygon 等。

在这两种情况下都是不可见的。

注意

二维样条线需要在各向同性坐标系中创建。使用设备坐标(如果需要,可进行各向异性校正。)

例子

## based on examples in ?grid.xspline

xsplineTest <- function(s, open = TRUE,
                        x = c(1,1,3,3)/4,
                        y = c(1,3,3,1)/4, ...) {
    plot(c(0,1), c(0,1), type = "n", axes = FALSE, xlab = "", ylab = "")
    points(x, y, pch = 19)
    xspline(x, y, s, open, ...)
    text(x+0.05*c(-1,-1,1,1), y+0.05*c(-1,1,1,-1), s)
}
op <- par(mfrow = c(3,3), mar = rep(0,4), oma = c(0,0,2,0))
xsplineTest(c(0, -1, -1, 0))
xsplineTest(c(0, -1,  0, 0))
xsplineTest(c(0, -1,  1, 0))
xsplineTest(c(0,  0, -1, 0))
xsplineTest(c(0,  0,  0, 0))
xsplineTest(c(0,  0,  1, 0))
xsplineTest(c(0,  1, -1, 0))
xsplineTest(c(0,  1,  0, 0))
xsplineTest(c(0,  1,  1, 0))
title("Open X-splines", outer = TRUE)

par(mfrow = c(3,3), mar = rep(0,4), oma = c(0,0,2,0))
xsplineTest(c(0, -1, -1, 0), FALSE, col = "grey80")
xsplineTest(c(0, -1,  0, 0), FALSE, col = "grey80")
xsplineTest(c(0, -1,  1, 0), FALSE, col = "grey80")
xsplineTest(c(0,  0, -1, 0), FALSE, col = "grey80")
xsplineTest(c(0,  0,  0, 0), FALSE, col = "grey80")
xsplineTest(c(0,  0,  1, 0), FALSE, col = "grey80")
xsplineTest(c(0,  1, -1, 0), FALSE, col = "grey80")
xsplineTest(c(0,  1,  0, 0), FALSE, col = "grey80")
xsplineTest(c(0,  1,  1, 0), FALSE, col = "grey80")
title("Closed X-splines", outer = TRUE)

par(op)

x <- sort(stats::rnorm(5))
y <- sort(stats::rnorm(5))
plot(x, y, pch = 19)
res <- xspline(x, y, 1, draw = FALSE)
lines(res)
## the end points may be very close together,
## so use last few for direction
nr <- length(res$x)
arrows(res$x[1], res$y[1], res$x[4], res$y[4], code = 1, length = 0.1)
arrows(res$x[nr-3], res$y[nr-3], res$x[nr], res$y[nr], code = 2, length = 0.1)

参考

Blanc, C. and Schlick, C. (1995), X-splines : A Spline Model Designed for the End User, in Proceedings of SIGGRAPH 95, pp. 377-386. https://dept-info.labri.fr/~schlick/DOC/sig1.html

也可以看看

polygon

par 了解如何指定颜色。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Draw an X-spline。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。