如何在 ggplot2 (R) 中为多个 geom_line 图创建具有不同 alpha 的图例

How to create legend with differing alphas for multiple geom_line plots in ggplot2 (R)

我有以下两年的入学数据。 我想在我的情节和图例中通过给它一个不同的 alpha 来突出显示学校 H 的数据。

library(tidyverse)

schools <- c("A","B","C","D","E",
             "F","G","H","I","J")
yr2010 <- c(601,809,604,601,485,485,798,662,408,451)
yr2019 <- c(971,1056,1144,933,732,833,975,617,598,822)

data <- data.frame(schools,yr2010,yr2019)

我做了一些数据管理,为绘图准备好数据。

data2 <- data %>%
  gather(key = "year", value = "students", 2:3)

data2a <- data2 %>%
  filter(schools != "H")

data2b <- data2 %>%
  filter(schools == "H")

然后我尝试使用两个单独的 geom_line 图来绘制数据图,一个用于默认 alpha 和 size=1.5 的学校 H,另一个用于 alpha=.3 和 size=1 的其余学校。

ggplot(data2, aes(x=year,y=students,color=schools,group=schools)) +
  theme_classic() +
  geom_line(data = data2a, alpha=.3, size=1) +
  scale_color_manual(values=c("red","orange","green","skyblue","aquamarine","purple",
                              "pink","brown","black")) +
  geom_line(data = data2b, color="blue", size=1.5)

不过,我要强调的学校并不在图例中。所以我试图在 scale_color_manual 而不是 geom_line 调用中包含学校 H 的颜色。

ggplot(data2, aes(x=year,y=students,color=schools,group=schools)) +
  theme_classic() +
  geom_line(data = data2a, alpha=.3, size=1) +
  scale_color_manual(values=c("red","orange","green","skyblue","aquamarine","purple",
                              "pink","blue","brown","black")) +
  geom_line(data = data2b, size=1.5)

然而,现在传说中的alpha都一样了,这并没有像我想要的那样突出H学校。

我如何调用绘图,使图例与所有学校的线本身的 alpha 相匹配?

您需要像放置颜色一样在 aes 中放置 alpha 和大小类别。然后,您可以根据需要使用 scale_alpha_manual 和 scale_size_manual。此外,这样就不需要创建 data2a 和 data2b。

见下面的代码:

ggplot(data2, aes(x=year,y=students,color=schools,group=schools,
alpha=schools, size = schools)) +
  theme_classic() +
  geom_line() +
  scale_color_manual(values=c("red","orange","green","skyblue","aquamarine","purple",
                              "pink","blue","brown","black")) +
  scale_alpha_manual(values = c(0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,NA, 0.3, 0.3)) + 
  #for the default alpha, you can write 1 or NA
  scale_size_manual(values= c(1,1,1,1,1,1,1,1.5,1,1))

The code brings this plot. Please click.

希望有用。