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


R grid.path 画一条路径


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

说明

这些函数创建并绘制一条或多条路径。路径的终点将自动连接到起点。

用法

pathGrob(x, y,
         id=NULL, id.lengths=NULL,
         pathId=NULL, pathId.lengths=NULL,
         rule="winding",
         default.units="npc",
         name=NULL, gp=gpar(), vp=NULL)
grid.path(...)

参数

x

指定 x-locations 的数值向量或单位对象。

y

指定 y-locations 的数值向量或单位对象。

id

用于将 xy 中的位置分隔为 sub-paths 的数值向量。所有具有相同id的位置都属于相同的sub-path。

id.lengths

用于将 xy 中的位置分隔为 sub-paths 的数值向量。指定组成单独sub-paths的连续位置块。

pathId

用于将 xy 中的位置分隔成不同路径的数值向量。所有具有相同 pathId 的位置都属于同一路径。

pathId.lengths

用于将 xy 中的位置分隔成路径的数值向量。指定组成单独路径的连续位置块。

rule

指定填充规则的字符值: "winding""evenodd"

default.units

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

name

字符标识符。

gp

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

vp

网格视口对象(或 NULL)。

...

传递给 pathGrob() 的参数。

细节

这两个函数都创建一个路径 grob(说明路径的图形对象),但只有 grid.path 绘制路径(并且仅当 drawTRUE 时)。

路径类似于多边形,只不过前者可以包含孔(由填充规则解释);如果路径边界分别包围该区域奇数或非零次数,则它们将填充该区域。

并非所有图形设备都支持此函数:例如xfigpictex 不支持。

一个抓取对象。

例子

pathSample <- function(x, y, rule, gp = gpar()) {
    if (is.na(rule))
        grid.path(x, y, id = rep(1:2, each = 4), gp = gp)
    else
        grid.path(x, y, id = rep(1:2, each = 4), rule = rule, gp = gp)
    if (!is.na(rule))
        grid.text(paste("Rule:", rule), y = 0, just = "bottom")
}

pathTriplet <- function(x, y, title) {
    pushViewport(viewport(height = 0.9, layout = grid.layout(1, 3),
                          gp = gpar(cex = .7)))
    grid.rect(y = 1, height = unit(1, "char"), just = "top",
              gp = gpar(col = NA, fill = "grey"))
    grid.text(title, y = 1, just = "top")
    pushViewport(viewport(layout.pos.col = 1))
    pathSample(x, y, rule = "winding",
               gp = gpar(fill = "grey"))
    popViewport()
    pushViewport(viewport(layout.pos.col = 2))
    pathSample(x, y, rule = "evenodd",
               gp = gpar(fill = "grey"))
    popViewport()
    pushViewport(viewport(layout.pos.col = 3))
    pathSample(x, y, rule = NA)
    popViewport()
    popViewport()
}

pathTest <- function() {
    grid.newpage()
    pushViewport(viewport(layout = grid.layout(5, 1)))
    pushViewport(viewport(layout.pos.row = 1))
    pathTriplet(c(.1, .1, .9, .9, .2, .2, .8, .8),
                c(.1, .9, .9, .1, .2, .8, .8, .2),
                "Nested rectangles, both clockwise")
    popViewport()
    pushViewport(viewport(layout.pos.row = 2))
    pathTriplet(c(.1, .1, .9, .9, .2, .8, .8, .2),
                c(.1, .9, .9, .1, .2, .2, .8, .8),
                "Nested rectangles, outer clockwise, inner anti-clockwise")
    popViewport()
    pushViewport(viewport(layout.pos.row = 3))
    pathTriplet(c(.1, .1, .4, .4, .6, .9, .9, .6),
                c(.1, .4, .4, .1, .6, .6, .9, .9),
                "Disjoint rectangles")
    popViewport()
    pushViewport(viewport(layout.pos.row = 4))
    pathTriplet(c(.1, .1, .6, .6, .4, .4, .9, .9),
                c(.1, .6, .6, .1, .4, .9, .9, .4),
                "Overlapping rectangles, both clockwise")
    popViewport()
    pushViewport(viewport(layout.pos.row = 5))
    pathTriplet(c(.1, .1, .6, .6, .4, .9, .9, .4),
                c(.1, .6, .6, .1, .4, .4, .9, .9),
                "Overlapping rectangles, one clockwise, other anti-clockwise")
    popViewport()
    popViewport()
}

pathTest()

# Drawing multiple paths at once
holed_rect <- cbind(c(.15, .15, -.15, -.15, .1, .1, -.1, -.1), 
                    c(.15, -.15, -.15, .15, .1, -.1, -.1, .1))
holed_rects <- rbind(
    holed_rect + matrix(c(.7, .2), nrow = 8, ncol = 2, byrow = TRUE),
    holed_rect + matrix(c(.7, .8), nrow = 8, ncol = 2, byrow = TRUE),
    holed_rect + matrix(c(.2, .5), nrow = 8, ncol = 2, byrow = TRUE)
)
grid.newpage()
grid.path(x = holed_rects[, 1], y = holed_rects[, 2], 
          id = rep(1:6, each = 4), pathId = rep(1:3, each = 8),
          gp = gpar(fill = c('red', 'blue', 'green')),
          rule = 'evenodd')

# Not specifying pathId will treat all points as part of the same path, thus 
# having same fill
grid.newpage()
grid.path(x = holed_rects[, 1], y = holed_rects[, 2], 
          id = rep(1:6, each = 4),
          gp = gpar(fill = c('red', 'blue', 'green')),
          rule = 'evenodd')

作者

Paul Murrell

也可以看看

Gridviewport

相关用法


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