使用多个变量时更改图例标签

Posted

技术标签:

【中文标题】使用多个变量时更改图例标签【英文标题】:Changing legend labels when using multiple variables 【发布时间】:2020-11-27 00:27:50 【问题描述】:

在 R 中使用 ggplot: 我正在尝试绘制一个以多列作为单个变量的线图。我没有使用 fill = 参数,所以我知道这就是 scale_fill_discrete 不起作用的原因。从我从其他类似问题中看到的情况来看,似乎所有其他选项(scale_colour_discrete、scale_shape_discrete 等)都要求您在构建绘图的第一步中使用这些参数。这可能是我的主要问题,但我不知道如何用三个不同的变量来解决它。现在显示的图例显示了三种不同的颜色,但它们与正确的变量没有关联。

ggplot(summary_5yr) + 
geom_line(aes(x = Year, y = NY_Med_Inc, group = 1, color ="blue")) +
geom_line(aes(x = Year, y = FL_Med_Inc, group = 1, color = "red")) +
geom_line(aes(x = Year, y = WA_Med_Inc, group = 1, color = "green")) +
labs(title = "Median Income Trends", x = "Year", y = "Median Income (USD)")

【问题讨论】:

【参考方案1】:

试试这个。要获得正确的颜色和图例,您必须使用scale_color_manual。在aes() 中使用color = "blue" 不会将颜色设置为“蓝色”。相反,“蓝色”只是一种标签,您必须在scale_color_manual 中为其分配颜色。还。要获得正确的标签,您必须设置 labels 参数。

实现所需情节的第二种方法是将您的 df 重塑为长格式,例如tidyr::pivot_longer。这样只需要一个geom_line 层,您就可以自动获得正确的标签。

library(ggplot2)
library(tidyr)
library(dplyr)

set.seed(123)

summary_5yr <- data.frame(
  Year = 2010:2020,
  NY_Med_Inc = runif(11, 10000, 50000),
  FL_Med_Inc = runif(11, 10000, 50000),
  WA_Med_Inc = runif(11, 10000, 50000)
)

ggplot(summary_5yr) + 
  geom_line(aes(x = Year, y = NY_Med_Inc, group = 1, color ="blue")) +
  geom_line(aes(x = Year, y = FL_Med_Inc, group = 1, color = "red")) +
  geom_line(aes(x = Year, y = WA_Med_Inc, group = 1, color = "green")) +
  scale_color_manual(values = c(blue = "blue", red = "red", green = "green"),
                     labels = c(blue = "NY_Med_Inc", red = "FL_Med_Inc", green = "WA_Med_Inc")) +
  labs(title = "Median Income Trends", x = "Year", y = "Median Income (USD)")

summary_5yr %>% 
    tidyr::pivot_longer(-Year, names_to = "var", values_to = "value") %>% 
    ggplot() + 
    geom_line(aes(x = Year, y = value, group = var, color = var)) +
    scale_color_manual(values = c(NY_Med_Inc = "blue", FL_Med_Inc = "red", WA_Med_Inc = "green")) +
    labs(title = "Median Income Trends", x = "Year", y = "Median Income (USD)")

【讨论】:

以上是关于使用多个变量时更改图例标签的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:如何在 plotly express 折线图中更改图例的变量/标签名称?

更改图例标签时,Matplotlib 图例颜色会发生变化

更改ggplot2图例中单个标签的字体(变为粗体)

无法在 R 中使用 ggplot2 更改图例标题和标签

如何使用 seaborn FacetGrid 更改字体大小?

使用相同的标签和颜色为不同的图形手动斜体和着色图例