首页 > 解决方案 > 更改图例几何类型

问题描述

我有一个使用 alpha 作为其刻度之一的线图。

不幸的是,似乎有一个错误导致 alpha 图例不起作用,即使它们正在情节中工作并且 Hadley 已将其视为 Windows 错误而将其驳回。

作为一种解决方法,有谁知道如何将图例中的几何图形从一条线更改为一个框(以同样的方式显示条形图的填充)?

我已经摆弄了overwrite_aesguide_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))

  

标签: rggplot2

解决方案


也许它并不完美,但我发现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()

在此处输入图像描述


推荐阅读