更改图例几何类型
Posted
技术标签:
【中文标题】更改图例几何类型【英文标题】:Change legend geom type 【发布时间】:2021-04-12 17:57:04 【问题描述】:我有一个使用 alpha 作为其刻度之一的线图。
不幸的是,似乎有一个错误导致 alpha 图例无法正常工作,即使它们正在情节中工作并且 Hadley 已将其视为 Windows 错误而将其驳回。
作为一种解决方法,有谁知道如何将图例中的几何图形从一条线更改为一个框(以与显示条形图的填充相同的方式)?
我已经修改了 guide_legend 的 overwrite_aes
参数,但是如果这是解决方案,我还没有弄清楚要使用什么参数。
示例 ggplot:
ggplot(data, aes(x = x)) +
geom_line(aes(y = y1, alpha = "test 1")) +
geom_line(aes(y = y2, alpha = "test 2")) +
scale_alpha_manual(values = c(1, 0.5))
【问题讨论】:
【参考方案1】:也许它并不完美,但我发现 override.aes()
可以工作。
library(tidyverse)
dat <- tibble(
x = 1:10,
y1 = runif(10),
y2 = runif(10)
)
ggplot(dat, aes(x = x)) +
geom_line(aes(y = y1, alpha = "test 1")) +
geom_line(aes(y = y2, alpha = "test 2")) +
scale_alpha_manual(values = c(1, 0.5)) +
guides(alpha = guide_legend(override.aes = list(size = 6))) +
theme_classic()
编辑:有些“黑客”
这肯定比第一个更hack。
ggplot() +
geom_line(data=dat, aes(x=x, y = y1), alpha=1) +
geom_line(data=dat, aes(x=x, y = y2), alpha =.5) +
geom_segment(aes(x=min(dat$x), xend=min(dat$x + .05*diff(range(dat$x))),
y = max(c(dat$y1, dat$y2)), yend=max(c(dat$y1, dat$y2))),
alpha=1, size=6) +
geom_segment(aes(x=min(dat$x), xend=min(dat$x + .05*diff(range(dat$x))),
y = max(c(dat$y1, dat$y2))-.025, yend=max(c(dat$y1, dat$y2))-.025),
alpha=.5, size=6) +
geom_text(aes(x=min(dat$x + .06*diff(range(dat$x))),
y = max(c(dat$y1, dat$y2)),
label = "test1"), hjust=0) +
geom_text(aes(x=min(dat$x + .06*diff(range(dat$x))),
y = max(c(dat$y1, dat$y2))-.025,
label = "test2"), hjust=0)+
theme_classic()
【讨论】:
这是一个很好的解决方案,但不幸的是对于我的目的来说还不够“hacky”。由于图形错误是一条线,我仍然遇到同样的问题:我的图例没有显示任何 alpha 值 @DanielV 我添加了一个可能适合您需求的“hackier”解决方案。 这更老套,但我已经有了颜色和线型的图例,所以这也行不通。周末多了,但我想我要在数据集中使用创建的 NA 位置值创建新的几何图形。以上是关于更改图例几何类型的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2016堆积条形图图例:更改标签标题