在图例中将geom_vline显示为水平线。

3

我正在组合具有不同线型的各种geom_vline的图表。问题是它们在图例中不容易区分,尤其是当线型数量增加时。我想知道是否有一种方法可以将它们显示为图例中的水平线,因为图表中唯一的线条都是垂直的。

示例:

plot_test <- ggplot() +
  geom_vline(aes(xintercept = 1, linetype="Line 1"), linewidth=1) +
  geom_vline(aes(xintercept = 2, linetype="Line 2"), linewidth=1) +
  geom_vline(aes(xintercept = 3, linetype="Line 3"), linewidth=1) +
  geom_vline(aes(xintercept = 4, linetype="Line 4"), linewidth=1) +
  geom_vline(aes(xintercept = 5, linetype="Line 5"), linewidth=1) +
  scale_linetype_manual("",values=c("Line 1"=1, "Line 2"=2, "Line 3" = 3, "Line 4"=4, "Line 5"=5))+
  theme_bw()

plot_test

提供:

enter image description here

2个回答

4
你可以使用 key_glyph 参数和 path 来水平旋转线条:
library(ggplot2)
plot_test <- ggplot() +
  geom_vline(aes(xintercept = 1, linetype="Line 1"), linewidth=1, key_glyph = "path") +
  geom_vline(aes(xintercept = 2, linetype="Line 2"), linewidth=1, key_glyph = "path") +
  geom_vline(aes(xintercept = 3, linetype="Line 3"), linewidth=1, key_glyph = "path") +
  geom_vline(aes(xintercept = 4, linetype="Line 4"), linewidth=1, key_glyph = "path") +
  geom_vline(aes(xintercept = 5, linetype="Line 5"), linewidth=1, key_glyph = "path") +
  scale_linetype_manual("",values=c("Line 1"=1, "Line 2"=2, "Line 3" = 3, "Line 4"=4, "Line 5"=5))+
  theme_bw()

plot_test


另一种方法是使用一个geom_vline,只需使用一次key_glyph。还请查看@AllanCameron的答案,当然也非常完美:
library(ggplot2)
plot_test <- ggplot() +
  geom_vline(aes(xintercept = c(1,2,3,4,5), 
                 linetype=c("Line 1", "Line 2", "Line 3", "Line 4", "Line 5")), 
             linewidth=1, key_glyph = "path") +
  scale_linetype_manual("",values=c("Line 1"=1, "Line 2"=2, "Line 3" = 3, "Line 4"=4, "Line 5"=5))+
  theme_bw() 

plot_test

于2023年07月24日使用reprex v2.0.2创建


好的回答。有没有想法为什么像guides(linetype=guide_legend(override.aes = list(key_glyph="path")))这样的东西不能起作用,以便更改所有图层而不是编辑每个图层? - MrFlick
@MrFlick 虽然很奇怪,但你可以直接在 GeomVlinedraw_key 成员中编写另一个 draw_key 函数。这样做似乎会改变对象的命名空间。 - Allan Cameron
@MrFlick,我也是这么想的。幸运的是,Allan当然找到了一个完美的方法。或者,我们可以使用一个geom。 - Quinten
@AllanCameron。你是对的。这不是aes。我把括号搞混了。有道理。但是感觉这个应该可以通过guides来改变,所以也许值得将其作为一个问题提交给ggplot。 - MrFlick
1
太棒了,谢谢!不知道我怎么忽略了key_glyph参数。 - Elk
显示剩余3条评论

2
如果您已经有了绘图对象,只想更改绘制键,您可以通过直接更改几何对象来实现。
假设我们从您的绘图开始:
plot_test

enter image description here

我们可以简单地做。
GeomVline$draw_key <- draw_key_path

plot_test

enter image description here


谢谢!很难决定要接受哪个,所以我选择了第一个答案。对于你的回答中的最小代码,给你加一分! - Elk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接