排除ggplot2上图例条目中的箭头

Har*_*son 3 r ggplot2

我正在绘制一个geom_path()并且我希望它在图中有箭头,但在图例中没有箭头.谷歌搜索表明形式的东西

guides(color=guide_legend(override.aes = list(..)) 
Run Code Online (Sandbox Code Playgroud)

会有答案,但我找不到list()预期的文件.帮助文件guide_legend()说"查看示例"以了解更多信息,override.aes但只有一个示例显示如何在图例中设置alpha级别.

为了使我想做的具体,这里的代码产生带箭头的图,

data <- data.frame(x=c(1, 1, 1, 2),
                   y=c(1, 2, 1, 1),
                   color=c('color1', 'color1', 'color2', 'color2'))

library(ggplot2)
ggplot(data, aes(x=x, y=y, color=color, group=color)) +
  geom_path(size=2,
            arrow = arrow(angle = 30, 
                          length = unit(0.1, "inches"),
                          ends = "last", type = "closed")) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

这输出 用箭头绘图

但我正在寻找的是没有箭头版本的传奇,如

ggplot(data, aes(x=x, y=y, color=color, group=color)) +
  geom_path(size=2) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

谢谢!

Cal*_*You 7

一个稍微粗暴的方法就是使用由geom_line箭头而不是箭头创建的图例.在这里,我打电话geom_pathshow.legend = FALSE隐藏箭头传奇.然后我使用geom_line,它只是在现有线的顶部绘制线条(因此情节不会改变),但给我们一个没有箭头的图例.

library(tidyverse)
data = tibble(x=c(1, 1, 1, 2),
                  y=c(1, 2, 1, 1),
                  color=c('color1', 'color1', 'color2', 'color2'))

ggplot(data, aes(x=x, y=y, color=color, group=color)) +
  geom_path(
    size=2,
    arrow = arrow(
      angle = 30,
      length = unit(0.1, "inches"),
      ends = "last", type = "closed"
    ),
    show.legend = FALSE
  ) +
  geom_line(size = 2) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)


Cla*_*lke 5

从理论上讲,这应该起作用:

ggplot(data, aes(x=x, y=y, color=color, group=color)) +
  geom_path(size=2,
            arrow = arrow(angle = 30, 
                          length = unit(0.1, "inches"),
                          ends = "last", type = "open")) +
  theme_bw() +
  guides(color=guide_legend(override.aes = list(arrow = NULL))) 
Run Code Online (Sandbox Code Playgroud)

但是,事实并非如此。

替代方法是提供GeomPath一个新的图例绘制功能,该功能不会绘制箭头:

# legend drawing function that ignores arrow setting
# modified from ggplot2 function `draw_key_path`,
# available here: https://github.com/tidyverse/ggplot2/blob/884fdcbaefd60456978f19dd2727ab698a07df5e/R/legend-draw.r#L108
draw_key_line <- function(data, params, size) {
  data$linetype[is.na(data$linetype)] <- 0

  grid::segmentsGrob(0.1, 0.5, 0.9, 0.5,
    gp = grid::gpar(
      col = alpha(data$colour, data$alpha),
      lwd = data$size * .pt,
      lty = data$linetype,
      lineend = "butt"
    )
  )
}

# override legend drawing function for GeomPath
GeomPath$draw_key <- draw_key_line

ggplot(data, aes(x=x, y=y, color=color, group=color)) +
  geom_path(size=2,
            arrow = arrow(angle = 30, 
                          length = unit(0.1, "inches"),
                          ends = "last", type = "closed")) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

请注意,这将GeomPath在您的R会话的其余时间发生变化。要恢复到原始行为,可以设置:

GeomPath$draw_key <- draw_key_path
Run Code Online (Sandbox Code Playgroud)