如何在ggplot中更改图例标题


299

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

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")

但这是行不通的。什么是正确的方法?

在此处输入图片说明


110
labs(fill="xyz")应该做
baptiste

1
@baptiste我已经回到这个问题很多次了,但没有注意到您的评论,您能将它写成答案吗?IMO这是最简单的解决方案,值得认可
User632716

3
@ User632716,它已经在下面的某个人的答案中
baptiste

7
它不起作用...
胜利

1
对于那些寻找包含多条geom_语句的答案的人,我建议在stackoverflow.com/a/38485985/1169233上找到答案,这是唯一对我有用的答案。
Waldir Leoncio

Answers:


347

这应该工作:

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")

10
另一个选择是p$labels$fill <- "New Legend Title"
Alex Holcombe

3
guides和scale_fill_discrete之间有什么区别
Medhat

18
p$labels$fill没有为我工作。与ggplot2_2.1.0我一起使用p$labels$colour <- "New legend title"
ClementWalter

4
p$labels$fill 很好,但是如果您在aes中使用了多个变量(线型,颜色,形状),则必须分别更改每个变量。
discipulus '16

226

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

 + labs(color='NEW LEGEND TITLE') 

可能没有用。但是你取代颜色填充,它的作品!

+ labs(fill='NEW LEGEND TITLE') 

这在ggplot2_2.1.0中对我有用


20
我认为这是最直接的答案,它恰好是OP要求的,最多只需多一条线
-Leo

3
color =和fill =都应该起作用。这是对问题IMO的“正确”答案

3
填充颜​​色是否有效取决于实际映射到的“ cond”(或在其他情况下为组)。一个很好的解释可以在cookbook-r.com/Graphs/Legends_(ggplot2)中
user1442363

3
这是最好的答案。
Akshay Gaur,

1
注:在GGPLOT2 3.0+这个解决方案没有奏效:解决它通过p + guides(fill=guide_legend(title="New Legend Title"))
萨曼斯拉撒路

39

由于您有两种浓度,因此我想您可能想使用来设置自己的颜色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"))

在此处输入图片说明


27

上面的代码都不适合我。

这是我发现的并且有效。

labs(color = "sale year")

您还可以通过\n在结尾处添加标题和显示之间的空格。

labs(color = 'sale year\n")


2
这和这个答案有什么不同?
Merv

3
是的,我尝试了上面的每个示例,这是唯一对我有用的示例。谢谢!
SummerEla

鉴于最初的帖子问题,似乎需要fill代替color(或colour)的工作如何?给定问题的时间,可能ggplot2与版本有关。
史蒂夫(Steveb)

1
@merv的主要区别是这一功能确实有效。
路易斯·德索萨

16

由于您在代码中曾经使用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。


...,但是对于geom_point(),这对我guides(color=guide_legend("Type:"))
有用

1
@knb,您的方法有效:guides(color=guide_legend("Score Ranking:"))
bmc

1
这个答案有什么不同?
Merv

6

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

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

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

如非常好的ggplot文档所示

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

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

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


26
这并没有为我工作,但qplot(…) + guides(color=guide_legend(title="sale year"))工作
阿尔诺一个

3

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

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")

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上的示例进行修改的。


1

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

qplot() + guides(color=guide_legend(title="sale year")) 

1

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

read.table(sep = '\t')

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

read.csv()

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.