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


R grid.xspline 绘制 X 样条线


R语言 grid.xspline 位于 grid 包(package)。

说明

这些函数创建并绘制 xspline,即相对于控制点绘制的曲线。

用法

grid.xspline(...)
xsplineGrob(x = c(0, 0.5, 1, 0.5), y = c(0.5, 1, 0.5, 0),
            id = NULL, id.lengths = NULL,
            default.units = "npc",
            shape = 0, open = TRUE, arrow = NULL, repEnds = TRUE,
            name = NULL, gp = gpar(), vp = NULL)

参数

x

指定样条控制点x-locations的数值向量或单位对象。

y

指定样条控制点y-locations的数值向量或单位对象。

id

用于将 xy 中的位置分成多个 xsplines 的数值向量。具有相同 id 的所有位置都属于同一 xspline。

id.lengths

用于将 xy 中的位置分隔成多个 xspline 的数值向量。指定构成单独xspline 的连续位置块。

default.units

指示 xy 仅作为数值向量给出时使用的默认单位的字符串。

shape

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

open

指示样条线是直线还是闭合形状的逻辑值。

arrow

说明要放置在 xspline 两端的箭头的列表,由 arrow 函数生成。

repEnds

一个逻辑值,指示是否应复制第一个和最后一个控制点来绘制曲线(请参阅下面的详细信息)。

name

字符标识符。

gp

"gpar" 的对象,通常是调用函数 gpar 的输出。这本质上是图形参数设置的列表。

vp

网格视口对象(或 NULL)。

...

要传递给 xsplineGrob 的参数。

细节

这两个函数都创建 xspline grob(说明 xspline 的图形对象),但只有 grid.xspline 绘制 xspline。

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

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

对于开放 x 样条线,起点和终点控制点的形状必须为 0(并且非零值会在不发出警告的情况下自动转换为零)。

对于开放 x 样条线,默认情况下,在绘制曲线之前实际上会复制起点和终点控制点。在每组四个控制点的第二个和第三个之间绘制一条曲线(插值或近似),因此此默认行为可确保生成的曲线从您指定的第一个控制点开始,到最后一个控制点结束。可以通过 repEnds 参数关闭默认行为,在这种情况下,绘制的曲线从(大约)第二个控制点开始,(大约)在第一个和倒数第二个控制点结束。

对于闭合 xsplines,repEnds 参数将被忽略。

xy 不允许缺少值(即,缺少控制点是无效的)。

对于闭合 x 样条线,会在最终控制点和初始控制点之间自动绘制一条曲线。

一个抓取对象。

例子

x <- c(0.25, 0.25, 0.75, 0.75)
y <- c(0.25, 0.75, 0.75, 0.25)

xsplineTest <- function(s, i, j, open) {
  pushViewport(viewport(layout.pos.col=j, layout.pos.row=i))
  grid.points(x, y, default.units="npc", pch=16, size=unit(2, "mm"))
  grid.xspline(x, y, shape=s, open=open, gp=gpar(fill="grey"))
  grid.text(s, gp=gpar(col="grey"),
            x=unit(x, "npc") + unit(c(-1, -1, 1, 1), "mm"),
            y=unit(y, "npc") + unit(c(-1, 1, 1, -1), "mm"),
            hjust=c(1, 1, 0, 0),
            vjust=c(1, 0, 0, 1))
  popViewport()
}

pushViewport(viewport(width=.5, x=0, just="left",
                      layout=grid.layout(3, 3, respect=TRUE)))
pushViewport(viewport(layout.pos.row=1))
grid.text("Open Splines", y=1, just="bottom")
popViewport()
xsplineTest(c(0, -1, -1, 0), 1, 1, TRUE)
xsplineTest(c(0, -1,  0, 0), 1, 2, TRUE)
xsplineTest(c(0, -1,  1, 0), 1, 3, TRUE)
xsplineTest(c(0,  0, -1, 0), 2, 1, TRUE)
xsplineTest(c(0,  0,  0, 0), 2, 2, TRUE)
xsplineTest(c(0,  0,  1, 0), 2, 3, TRUE)
xsplineTest(c(0,  1, -1, 0), 3, 1, TRUE)
xsplineTest(c(0,  1,  0, 0), 3, 2, TRUE)
xsplineTest(c(0,  1,  1, 0), 3, 3, TRUE)
popViewport()
pushViewport(viewport(width=.5, x=1, just="right",
                      layout=grid.layout(3, 3, respect=TRUE)))
pushViewport(viewport(layout.pos.row=1))
grid.text("Closed Splines", y=1, just="bottom")
popViewport()
xsplineTest(c(-1, -1, -1, -1), 1, 1, FALSE)
xsplineTest(c(-1, -1,  0, -1), 1, 2, FALSE)
xsplineTest(c(-1, -1,  1, -1), 1, 3, FALSE)
xsplineTest(c( 0,  0, -1,  0), 2, 1, FALSE)
xsplineTest(c( 0,  0,  0,  0), 2, 2, FALSE)
xsplineTest(c( 0,  0,  1,  0), 2, 3, FALSE)
xsplineTest(c( 1,  1, -1,  1), 3, 1, FALSE)
xsplineTest(c( 1,  1,  0,  1), 3, 2, FALSE)
xsplineTest(c( 1,  1,  1,  1), 3, 3, FALSE)
popViewport()

参考

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

也可以看看

Gridviewportarrow

xspline

相关用法


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