當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。