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


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