如何在 ggplot 中创建一个图例,将名称和颜色分配给列而不是数据框列中的值?

Posted

技术标签:

【中文标题】如何在 ggplot 中创建一个图例,将名称和颜色分配给列而不是数据框列中的值?【英文标题】:How can I create a legend in ggplot which assigns names and colors to columns and not to values within a column of a dataframe? 【发布时间】:2021-12-11 21:23:53 【问题描述】:

我一直在寻找在 ggplot 中创建图例的想法,但所有解决方案都只提供图例,这些图例将数据框中的单个列的数据按颜色和名称划分为不同的组,组 =“columnname”。 这是给出的数据框的头部:

ewmSlots ewmValues ewmValues2 ewmValues3
1 0.7785078 0.7785078 0
2 0.7198410 0.7491744 0
3 0.7333798 0.7412771 0
4 0.9102729 0.8257750 0
5 0.7243151 0.7750450 0
6 0.8706777 0.8228614 0

现在我想要一个以各自的名称和颜色显示 ewmValues、ewmValues2 和 ewmValues3 的图例。

举一个简单的例子,我发现的其他解决方案可以解决这样的问题

time sex
lunch male
dinner female
dinner male
lunch female

传说会在哪里显示性别和每种性别的颜色,这显然不是问题 我想在这里解决。

【问题讨论】:

显示您想要的输出图示例可能会有所帮助 【参考方案1】:

只是融合数据怎么样(让我们将上面的示例称为名为 ewm 的数据框)?

# With melt
ggplot(melt(ewm, id.vars = "ewmSlots"), aes(ewmSlots, value, color=variable, stat='identity')) +
  geom_line(size=1.4) + labs(color="")

如果你反对融化,下面给出完全相同的东西:

# Without melt
ggplot(ewm, aes(ewmSlots)) + 
  geom_line(aes(y=ewmValues, color="ewmValues"), size=1.4) + 
  geom_line(aes(y=ewmValues2, color="ewmValues2"), size=1.4) + 
  geom_line(aes(y=ewmValues3, color="ewmValues3"), size=1.4) + 
  labs(color="", y="value")

【讨论】:

如何更改赋予线条的颜色? ggplot 自动为三行中的每一行分配颜色。

以上是关于如何在 ggplot 中创建一个图例,将名称和颜色分配给列而不是数据框列中的值?的主要内容,如果未能解决你的问题,请参考以下文章

在 ggplot2 中创建具有不同数据集的图例

如何在 Spatstat 中创建带有覆盖两个标记的图例的组合颜色图?

在 R 中创建具有匹配颜色和线条形状的图例

将多图 ggplots 与拼凑和单个图例对齐

在R中创建具有匹配颜色和线形的图例

在ggplot中创建半离散颜色条