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


R ggplot2 geom_segment 线段和曲线


geom_segment() 在点 (x, y) 和 (xend, Yend) 之间绘制一条直线。 geom_curve() 绘制一条曲线。有关控制曲线的参数,请参阅底层绘图函数grid::curveGrob()

用法

geom_segment(
  mapping = NULL,
  data = NULL,
  stat = "identity",
  position = "identity",
  ...,
  arrow = NULL,
  arrow.fill = NULL,
  lineend = "butt",
  linejoin = "round",
  na.rm = FALSE,
  show.legend = NA,
  inherit.aes = TRUE
)

geom_curve(
  mapping = NULL,
  data = NULL,
  stat = "identity",
  position = "identity",
  ...,
  curvature = 0.5,
  angle = 90,
  ncp = 5,
  arrow = NULL,
  arrow.fill = NULL,
  lineend = "butt",
  na.rm = FALSE,
  show.legend = NA,
  inherit.aes = TRUE
)

参数

mapping

aes() 创建的一组美学映射。如果指定且inherit.aes = TRUE(默认),它将与绘图顶层的默认映射组合。如果没有绘图映射,则必须提供mapping

data

该层要显示的数据。有以下三种选择:

如果默认为 NULL ,则数据继承自 ggplot() 调用中指定的绘图数据。

data.frame 或其他对象将覆盖绘图数据。所有对象都将被强化以生成 DataFrame 。请参阅fortify() 将为其创建变量。

将使用单个参数(绘图数据)调用function。返回值必须是 data.frame ,并将用作图层数据。可以从 formula 创建 function (例如 ~ head(.x, 10) )。

stat

用于该层数据的统计变换,可以作为 ggproto Geom 子类,也可以作为命名去掉 stat_ 前缀的统计数据的字符串(例如 "count" 而不是 "stat_count" )

position

位置调整,可以是命名调整的字符串(例如 "jitter" 使用 position_jitter ),也可以是调用位置调整函数的结果。如果需要更改调整设置,请使用后者。

...

其他参数传递给 layer() 。这些通常是美学,用于将美学设置为固定值,例如 colour = "red"size = 3 。它们也可能是配对的 geom/stat 的参数。

arrow

箭头规范,由 grid::arrow() 创建。

arrow.fill

用于箭头的填充颜色(如果关闭)。 NULL意味着使用colour美学。

lineend

线端样式(圆形、对接、方形)。

linejoin

线连接样式(圆形、斜接、斜角)。

na.rm

如果 FALSE ,则默认缺失值将被删除并带有警告。如果 TRUE ,缺失值将被静默删除。

show.legend

合乎逻辑的。该层是否应该包含在图例中? NA(默认值)包括是否映射了任何美学。 FALSE 从不包含,而 TRUE 始终包含。它也可以是一个命名的逻辑向量,以精细地选择要显示的美学。

inherit.aes

如果 FALSE ,则覆盖默认美学,而不是与它们组合。这对于定义数据和美观的辅助函数最有用,并且不应继承默认绘图规范的行为,例如borders()

curvature

给出曲率量的数值。负值产生左手曲线,正值产生右手曲线,零产生直线。

angle

0 到 180 之间的数值,给出曲线控制点的倾斜量。小于 90 的值使曲线向起点倾斜,大于 90 的值使曲线向终点倾斜。

ncp

用于绘制曲线的控制点的数量。更多控制点可创建更平滑的曲线。

细节

两种几何图形都为每种情况绘制一条线段/曲线。如果您需要跨多个案例连接点,请参阅geom_path()

美学

geom_segment() 理解以下美学(所需的美学以粗体显示):

  • x

  • y

  • xend

  • yend

  • alpha

  • colour

  • group

  • linetype

  • linewidth

vignette("ggplot2-specs") 中了解有关设置这些美学的更多信息。

也可以看看

geom_path()geom_line() 用于多段线和路径。

geom_spoke() 用于由位置 (x, y) 以及角度和半径参数化的线段。

例子

b <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point()

df <- data.frame(x1 = 2.62, x2 = 3.57, y1 = 21.0, y2 = 15.0)
b +
 geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "curve"), data = df) +
 geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "segment"), data = df)


b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = -0.2)

b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = 1)

b + geom_curve(
  aes(x = x1, y = y1, xend = x2, yend = y2),
  data = df,
  arrow = arrow(length = unit(0.03, "npc"))
)


if (requireNamespace('maps', quietly = TRUE)) {
ggplot(seals, aes(long, lat)) +
  geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat),
    arrow = arrow(length = unit(0.1,"cm"))) +
  borders("state")
}


# Use lineend and linejoin to change the style of the segments
df2 <- expand.grid(
  lineend = c('round', 'butt', 'square'),
  linejoin = c('round', 'mitre', 'bevel'),
  stringsAsFactors = FALSE
)
df2 <- data.frame(df2, y = 1:9)
ggplot(df2, aes(x = 1, y = y, xend = 2, yend = y, label = paste(lineend, linejoin))) +
  geom_segment(
     lineend = df2$lineend, linejoin = df2$linejoin,
     size = 3, arrow = arrow(length = unit(0.3, "inches"))
  ) +
  geom_text(hjust = 'outside', nudge_x = -0.2) +
  xlim(0.5, 2)


# You can also use geom_segment to recreate plot(type = "h") :
set.seed(1)
counts <- as.data.frame(table(x = rpois(100,5)))
counts$x <- as.numeric(as.character(counts$x))
with(counts, plot(x, Freq, type = "h", lwd = 10))


ggplot(counts, aes(x, Freq)) +
  geom_segment(aes(xend = x, yend = 0), linewidth = 10, lineend = "butt")

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Line segments and curves。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。