在ggplot2中更改图例名称而不更改颜色

14

我想重新命名图例中的值,但不改变已经设置的自定义颜色。有没有一种方法可以设置图例标签而不使用scale_color_manual?目前,我的代码类似于:

norm <- rnorm(1000, 0 , .5)
gam <- rgamma(1000, 2)
beta <- rbeta(1000, 2, 3)
dist <- data.frame(Normal = norm, Gamma = gam, Beta= beta)
dat <- melt(dist, variable.name = "Distribution", value.name = "XValue")
plot1 <- ggplot(dat, aes(XValue, color = Distribution)) +
            stat_density(geom = "path", position = "identity", size = 2) +
            scale_color_manual(values = c("yellow", "black", "forestgreen"))

plot2 <- plot1 + scale_color_discrete(labels = c("Distribution 1",
                                "Distribution 2",
                            "Distribution 3"))

然而,这将覆盖手动设置的颜色。我将在另一个函数中更改名称,该函数与我设置颜色的位置不同,因此,不幸的是,我将无法使用scale_color_manual(values =...,labels = ...)。我想到的另一种选项是以某种方式获取plot1中使用的颜色。然后我可以执行以下操作:

colors <- plot1$colors_used
plot2 <- plot1 + scale_color_manual(labels = c("Distribution 1", 
                                               "Distribution 2",
                        "Distribution 3"),
                                      values = colors)

非常感谢任何帮助。谢谢!

2个回答

11

可以使用scale_colour_manual指定标签名称。

ggplot(dat, aes(XValue, color = Distribution)) +
  stat_density(geom = "path", position = "identity", size = 2) +
  scale_color_manual(values = c("yellow", "black", "forestgreen"),
                     labels = c("Distribution 1",
                                "Distribution 2",
                                "Distribution 3"))

在此输入图像描述


谢谢大家,不幸的是,我宁愿不进行重构。标签的重命名将在单独的函数中完成。该函数将处理许多具有唯一颜色的不同图形。这些图形(以及颜色)将在许多不同的函数中创建。我希望能够只应用此函数来确定新名称,然后进行重命名。还有其他建议吗?谢谢! - Taylor
有人知道如何更改这里“分布”标签的颜色吗? - vegetarianCoder
这并没有回答OP的问题:“有没有一种方法可以在不使用scale_color_manual的情况下设置图例标签?”如果不可能,你的答案应该是“不行”。@joran 这显然是一个MWE,你不知道OP的代码是如何分解的。 - jessexknight

0
如果您愿意使用一致的颜色调色板,那么您可以将其定义为:
    mycolors <- c("red", "blue", "black", #ee4747, #fff382, #f1f6c8, #334d65, #263825)

现在,不再是

    values = c("yellow", "black", "forestgreen")

使用

    values = mycolors

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接