r - 如何在ggplot2中绘制漂亮的箭头

标签 r ggplot2 arrows

我正在创建一个 ggplot 图表,我希望在两点之间有一些箭头。使用geom_line(arrow = arrow())可以轻松完成主要任务。然而,我想要一些“漂亮”的粗箭头。通过 size= 调整箭头大小没有帮助,因为它完全弄乱了箭头的头部。我说明我的问题:

创建一些示例数据和绘图:

 NAME <- c("A", "A", "B", "B", "C", "C")
 YEAR <- c(2016, 2011, 2016, 2011, 2016, 2011)
 YEAR <- as.factor(YEAR)
 VALUE <- c(1, 4, 1, 5, 2, 8)
 DATA <- data.frame(NAME, YEAR, VALUE)

ggplot(DATA, aes(x=VALUE, y=NAME)) + 
  geom_point(size=5, aes(colour=YEAR)) +
  geom_line(arrow = arrow(length=unit(0.30,"cm"), ends="first", type = "closed"))

结果图如下所示:

plot1

现在我尝试“加粗”箭头......

ggplot(DATA, aes(x=VALUE, y=NAME)) + 
  geom_point(size=5, aes(colour=YEAR)) +
  geom_line(arrow = arrow(length=unit(0.30,"cm"), ends="first", type = "closed"), size = 3)

这就是此处显示的结果:

plot2

我的问题:有没有办法绘制一些“漂亮”的粗箭头?

最佳答案

这里有一些可重现的示例(尝试运行它们)

A Simple arrow (即线段):

library(dplyr)
library(ggplot2)

# Create a scatter plot
i <- ggplot(mtcars, aes(wt, mpg)) + geom_point()

# Add arrow
i + geom_segment(aes(x = 5, y = 30, xend = 3.5, yend = 25),
                  arrow = arrow(length = unit(0.5, "cm")))

enter image description here

A Simple curved arrow

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),
  data = df,
  arrow = arrow(length = unit(0.03, "npc"))
)

enter image description here

Available Arrow Types

您不必理解此代码,只需记下可用的 lineendlinejoin 选项即可

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)

enter image description here

自行切换的直箭头

这是一个非常简单的箭头,用于调整每个参数并查看它的作用

ggplot(iris) +
  geom_segment(
    x = 1, y = 1,
    xend = 4, yend = 7,
    lineend = "round", # See available arrow types in example above
    linejoin = "round",
    size = 2, 
    arrow = arrow(length = unit(0.3, "inches")),
    colour = "#EC7014" # Also accepts "red", "blue' etc
  ) + 
  scale_x_continuous(limits = c(0, 10)) +
  scale_y_continuous(limits = c(0, 10))

enter image description here

自行切换的弯曲箭头

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

b + geom_curve(
  aes(x = 3, y = 22, xend = 3.5, yend = 15),
  arrow = arrow(
    length = unit(0.03, "npc"), 
                type="closed" # Describes arrow head (open or closed)
    ),
  colour = "#EC7014",
  size = 1.2,
  angle = 90 # Anything other than 90 or 0 can look unusual
)

enter image description here

关于r - 如何在ggplot2中绘制漂亮的箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38008863/

相关文章:

r - 嵌套 ifelse 语句,具有编程数量的嵌套级别

r - 如何在不绘制原始数据的情况下向 ggplot 添加图例?

git - smartgit 分支窗口中的箭头

jquery - Fancybox - 将上一个/下一个箭头保留在同一位置

angular - 如何在 agm-map 中制作自定义箭头标记?

r - 在 Roxygen 中记录时 : How do I make an itemized list in @details?

R Shiny 日期范围输入

r - 按 R 中的列组长度对数据帧进行排序

r - 如何从 theme_set() 选项继承带注释的文本样式

r - 更改剪切函数中的标签符号样式?