我正在绘制一个geom_path()
,我希望它在图中有箭头,但在图例中没有箭头。谷歌搜索表明某种形式
guides(color=guide_legend(override.aes = list(..))
会得到答案,但我找不到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()
但我正在寻找的是没有箭头版本的传奇,如
ggplot(data, aes(x=x, y=y, color=color, group=color)) +
geom_path(size=2) +
theme_bw()
谢谢!
答案 0 :(得分:6)
这样做的一个简单方法就是使用由geom_line
而不是箭头创建的图例。在这里,我使用geom_path
调用show.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()
答案 1 :(得分:4)
理论上,这应该有效:
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)))
但是,它没有。
另一种方法是给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()
请注意,这会为您的R会话的其余部分更改GeomPath
。要恢复原始行为,您可以设置:
GeomPath$draw_key <- draw_key_path