如何在ggplot中更改图例标题

512

我有以下的图表,它是用以下命令创建的:

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修改为新图例标题

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

+labs(colour="NEW LEGEND TITLE")

但是它不起作用。怎样才是正确的做法?

enter image description here


209
labs(fill="xyz") 应该这样翻译: labs(fill="xyz") - baptiste
4
@User632716,它已经在下面某人的答案中了。 - baptiste
11
它不起作用。 - shenglih
7
对于那些需要使用多个geom_语句绘制图形的人,我建议参考这个回答:https://dev59.com/K2Ag5IYBdhLWcg3wZ6TY#38485985,这是唯一一个对我有用的答案。 - Waldir Leoncio
4
请注意,对于其他类型的图表(当您在aes中使用“colour”而不是“fill”时),OP问题代码已经可以工作。“Colour”已经是正确的,不是“fill”!我试了所有答案都没用,结果发现解决方案就在问题中!;) - Juan C
显示剩余2条评论
14个回答

3
我将告诉您一种方法,可以使用单个公式更改图例、轴、标题等的标签,并且您不需要记忆多个公式。这不会影响标签/标题和轴文本的字体样式或设计。
 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"

更改图例的方法。"fill"用于那些显示不同颜色的标签。如果您有显示大小的标签,例如1个点代表100,另一个点代表200等,则可以按如下方式使用此代码-
k$labels$size ="Size of points"

它将更改该标签的标题。


3

当你改变颜色时,可以将以下内容添加到代码中。这个方法也适用于包含两个离散变量的 qplot 图表:

p+ scale_fill_manual(values = Main_parties_color, name = "Main Parties")

2
我注意到有两种方法可以更改/指定ggboxplot()的图例标题:

我注意到 ggboxplot() 中有两种方法可以更改/指定图例标题:

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
许多人花费大量时间更改标签、图例标签、标题和轴的名称,因为他们不知道在R中可以加载包含空格" "的表格。然而,您可以通过指定分隔符来加载表格,例如用制表符(或任何其他分隔符)分隔的表格,以节省时间或减少代码大小:
read.table(sep = '\t')

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

read.csv()

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

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