412

我有下面的情节。它是使用以下命令创建的:

library(ggplot2)

df <- data.frame(cond = factor(rep(c("A", "B"), each = 200)), 
                 rating = c(rnorm(200), rnorm(200, mean=.8)))

ggplot(df, aes(x=rating, fill=cond)) + 
geom_density(alpha = .3) +
xlab("NEW RATING TITLE") +
ylab("NEW DENSITY TITLE")

现在,我想将图例标题cond修改为NEW LEGEND TITLE

所以,我只是添加了以下行添加上述代码的末尾:

+labs(colour="NEW LEGEND TITLE")

但它不起作用。正确的方法是什么?

在此处输入图像描述

4

13 回答 13

464

这应该有效:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
p <- p + guides(fill=guide_legend(title="New Legend Title"))

(或替代)

p + scale_fill_discrete(name = "New Legend Title")
于 2013-01-31T09:35:43.827 回答
358

我没有深入研究这个,但是因为你在 ggplot() 中使用了fill=cond ,

 + labs(color='NEW LEGEND TITLE') 

可能没有工作。但是,将color替换为fill,它可以工作!

+ labs(fill='NEW LEGEND TITLE') 

这在 ggplot2_2.1.0 中对我有用

于 2016-08-14T03:04:40.660 回答
54

由于您有两种密度,我想您可能想用 设置自己的颜色scale_fill_manual

如果是这样,您可以这样做:

df <- data.frame(x=1:10,group=c(rep("a",5),rep("b",5)))

legend_title <- "OMG My Title"

ggplot(df, aes(x=x, fill=group)) + geom_density(alpha=.3) +   
    scale_fill_manual(legend_title,values=c("orange","red"))

在此处输入图像描述

于 2013-01-31T09:39:55.113 回答
44

上面的代码都不适合我。

这是我发现的,它有效。

labs(color = "sale year")

您还可以通过\n在末尾添加来在标题和显示之间留出一个空格。

labs(color = 'sale year\n")

于 2018-07-25T15:54:46.603 回答
19

由于在您的代码中您曾经ggplot(data, fill= cond)创建直方图,因此您需要通过在标签部分中使用“填充”来添加图例标题,即+labs(fill="Title name")。如果您使用的是代码为 ggplot(data, colour= cond) 的不同类型的绘图,那么您可以使用+labs(colour= "Title Name"). 总之,lab 参数必须匹配 aes 参数。

我曾经+ guides(fill=guide_legend("my awesome title"))更改 geom_bar 图上的图例标题,但它似乎不适用于 geom_point。

于 2017-08-16T15:48:14.420 回答
12

还有另一个非常简单的答案可以适用于一些简单的图表。

只需在图表中添加对 guide_legend() 的调用即可。

ggplot(...) + ... + guide_legend(title="my awesome title")

如非常好的ggplot docs所示。

如果这不起作用,您可以通过调用guides更精确地设置您的指南参数:

ggplot(...) + ... + guides(fill=guide_legend("my awesome title"))

您还可以通过为您的调用指定这些参数来改变形状/颜色/大小guides

于 2013-08-23T16:49:20.087 回答
4

我在我的 ggplot 中使用了 facet_wrap,除了 ArnaudA 的解决方案外,没有任何建议的解决方案对我有用:

qplot(…) + guides(color=guide_legend(title="sale year")) 
于 2017-09-20T11:24:52.297 回答
4

只是为了添加到列表中(这里的其他选项对我不起作用),您还可以将函数 update_labels 用于 ggplot:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
update_labels(p, list(colour="MY NEW LEGEND TITLE")

这也将允许您使用单独的行更改 x 轴和 y 轴标签:

update_labels(p, list(x="NEW X LABEL",y="NEW Y LABEL")
于 2019-03-14T14:43:53.180 回答
2

我注意到有两种方法可以更改/指定 ggboxplot() 的 legend.title:

library(ggpubr)

bxp.defaultLegend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                               color = "dose", palette = "jco")

# Solution 1, setup legend.title directly in ggboxplot()
bxp.legend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                 color = "dose", palette = "jco", legend.title="Dose (mg)")

# Solution 2: Change legend title and appearnace in ggboxplot() using labs() and theme() option:
plot1 <-  bxp.defaultLegend + labs(color = "Dose (mg)") +
  theme(legend.title = element_text(color = "blue", size = 10), legend.text = element_text(color = "red"))

ggarrange(list(bxp.legend, bxp.defaultLegend, plot1), nrow = 1, ncol = 3,  common.legend = TRUE)

代码根据GitHub 中的示例进行了修改。

于 2019-11-28T11:17:45.747 回答
1

许多人花费大量时间更改标签、图例标签、标题和轴的名称,因为他们不知道可以在 R 中加载包含空格的表" "。但是,您可以这样做以节省时间或减少代码的大小,方法是在加载例如用制表符(或除默认或单个空格以外的任何其他分隔符)分隔的表时指定分隔符:

read.table(sep = '\t')

或使用 csv 格式的默认加载参数:

read.csv()

这意味着您可以直接将名称"NEW LEGEND TITLE"作为列名(标题)保留在原始数据文件中,以避免在每个图中指定新的图例标题。

于 2019-02-02T05:09:32.457 回答
1

将其添加到混合物中,以在您更改颜色时使用。这在具有两个离散变量的 qplot 中也对我有用:

p+ scale_fill_manual(values = Main_parties_color, name = "Main Parties")
于 2020-06-30T15:17:01.867 回答
1

我要告诉你的方式,将允许您使用单个公式更改图例、轴、标题等的标签,并且您不需要使用记住多个公式。这不会影响字体样式或标题和轴的标签/文本的设计。

我正在给出以下问题的完整答案。

 library(ggplot2)
 rating <- c(rnorm(200), rnorm(200, mean=.8))
 cond <-factor(rep(c("A", "B"), each = 200))
 df <- data.frame(cond,rating 
             )

 k<- ggplot(data=df, aes(x=rating, fill=cond))+ 
 geom_density(alpha = .3) +
 xlab("NEW RATING TITLE") +
 ylab("NEW DENSITY TITLE")

 # to change the cond to a different label
 k$labels$fill="New Legend Title"

 # to change the axis titles
 k$labels$y="Y Axis"
 k$labels$x="X Axis"
 k

我已将 ggplot 输出存储在变量“k”中。你可以给它起任何你喜欢的名字。后来我用过

k$labels$fill ="New Legend Title"

改变传说。“填充”用于显示不同颜色的标签。如果您有显示大小的标签,例如 1 点代表 100,其他点代表 200 等,那么您可以像这样使用此代码 -

k$labels$size ="Size of points"

它将更改该标签标题。

于 2020-10-19T07:45:31.953 回答
0

唯一适合我的解决方案: p + guides(fill=guide_legend("New title")

于 2021-10-14T09:32:49.667 回答