r - 更改图例几何类型
问题描述
我有一个使用 alpha 作为其刻度之一的线图。
不幸的是,似乎有一个错误导致 alpha 图例不起作用,即使它们正在情节中工作并且 Hadley 已将其视为 Windows 错误而将其驳回。
作为一种解决方法,有谁知道如何将图例中的几何图形从一条线更改为一个框(以同样的方式显示条形图的填充)?
我已经摆弄了overwrite_aes
guide_legend 的论点,但是如果这是解决方案,我还没有弄清楚要使用什么论点。
示例 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))
解决方案
也许它并不完美,但我发现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()
编辑:一些“黑客”
这肯定比第一个更hacker。
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()
推荐阅读
- python-3.x - Python PATH 无法定位
- javascript - 在 html/js 中旋转嵌入的 svg 对象
- hdf5 - 有没有办法快速将指定的表提取到不同的 HDF5 文件中?
- java - 子字符串不等于第一个字符的字符串
- python-3.x - cURL multipart/form-data 与文件到 Python 请求
- python - 通过迭代给定目录中不同大小的文件来打开 png 图像
- bash - Ansible playbook 不显示来自某个 shell 管道的输出
- c++ - 内省排序有问题
- filenames - 如果要求格式为 {firstname}_{lastname}.js,我该如何命名我的文件?
- python - 在python中更改装饰器参数变量的值