如何更改ggplot中的图例标题

Posted

技术标签:

【中文标题】如何更改ggplot中的图例标题【英文标题】:How to change legend title in ggplot 【发布时间】:2022-01-23 00:04:30 【问题描述】:

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

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

接下来我要做的是将 legend titlecond 修改为 NEW LEGEND TITLE

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

+labs(colour="NEW LEGEND TITLE")

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

【问题讨论】:

labs(fill="xyz") 应该这样做 @User632716 它已经在下面某人的回答中 它不起作用... 对于那些寻找包含多个geom_ 语句的情节的答案的人,我推荐***.com/a/38485985/1169233 的答案,这是唯一对我有用的答案。 请注意,对于其他类型的图表(当您在 aes 中使用“颜色”而不是“填充”时),OP 问题代码已经可以使用。 “颜色”已经是正确的,而不是“填充”!我正在疯狂地尝试所有答案,而我的解决方案就在问题中! ;) 【参考方案1】:

这应该可行:

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

【讨论】:

另一种选择是p$labels$fill &lt;- "New Legend Title" guides和scale_fill_discrete有什么区别 p$labels$fill 对我不起作用。对于ggplot2_2.1.0,我使用p$labels$colour &lt;- "New legend title" p$labels$fill 很好,但如果您在 aes 中使用多个美学变量(线型、颜色、形状),则必须分别更改它们。 许多scale_fill_... 函数可以将name 作为参数之一。我能够在我的 ggplot 链中使用:scale_fill_gradientn(colors = custom_colors, na.value = "transparent", name = "New Legend Title")【参考方案2】:

由于您有两种密度,我想您可能希望使用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"))

【讨论】:

请删除“OMG”【参考方案3】:

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

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

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

如图所示很不错的ggplot docs。

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

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

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

【讨论】:

这对我不起作用,但qplot(…) + guides(color=guide_legend(title="sale year")) 起作用了【参考方案4】:

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

 + labs(color='NEW LEGEND TITLE') 

可能没用。但是,如果您将 color 替换为 fill,它会起作用!

+ labs(fill='NEW LEGEND TITLE') 

这在 ggplot2_2.1.0 中对我有用

【讨论】:

我认为这是最简单的答案,它完全符合 OP 的要求,最多只多一行 color= 和 fill= 都可以。这是问题的“正确”答案,IMO 填充颜色是否有效取决于真正映射到的“cond”(或其他情况下的组)。一个很好的解释可以在cookbook-r.com/Graphs/Legends_(ggplot2)中找到 这是最好的答案。 注意:在 ggplot2 3.0+ 这个解决方案不起作用:由p + guides(fill=guide_legend(title="New Legend Title"))解决它【参考方案5】:

由于在您的代码中您使用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:")) @knb,你的方法有效:guides(color=guide_legend("Score Ranking:")) 这和this answer有什么不同?【参考方案6】:

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

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

【讨论】:

【参考方案7】:

以上代码都不适合我。

这是我发现的,它确实有效。

labs(color = "sale year")

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

labs(color = 'sale year\n")

【讨论】:

这和this answer有什么不同? 是的,我尝试了上面的每个示例,这是唯一对我有用的示例。谢谢! 鉴于原始帖子问题,这将如何工作,似乎需要fill 而不是color(或colour)?考虑到问题的时间,它可能与ggplot2 版本相关。 @merv 主要区别在于这个确实有效。 这完全是关于如何对数据进行分组并基于它创建图例。如果您使用ggplot(data=df, aes(x=time, y=value, linetype=variable)) 中的线型,那么labs(linetype = 'sale year\n") 将为您工作。【参考方案8】:

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

read.table(sep = '\t')

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

read.csv()

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

【讨论】:

【参考方案9】:

只是为了添加到列表中(这里的其他选项对我不起作用),您还可以使用函数 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")

【讨论】:

【参考方案10】:

我注意到有两种方法可以更改/指定 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)

代码是根据example from GitHub修改的。

【讨论】:

【参考方案11】:

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

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

【讨论】:

【参考方案12】:

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

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

 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"

它会改变标签标题。

【讨论】:

【参考方案13】:

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

【讨论】:

如果您想保留图例标题但更改图例中每个项目/变量的标签怎么办?例如,如何将 A 更改为 Alpha,将 B 更改为 Beta? 我想如果你的问题是正确的,图例是从你的数据框中获取的,所以在最坏的情况下,你可以使用带有 new 的 map 函数来重命名你的图例变量 您是否介意提供一个小示例,说明该脚本如何使用地图函数 ***.com/users/7739509/ayoub-el-majjodi 应用更改 同样有效:mutate(cond = recode(cond, "A" = "Alpha", "B" = "Beta")) %>% 像这样,如果我们想在一列中重命名图例: new_names = "A":"Alpha", "B":"Beta" df['new_legends']= df[' old_legend'].map(new_names) 我们将有一个新列,然后选择您可以使用哪一个图例

以上是关于如何更改ggplot中的图例标题的主要内容,如果未能解决你的问题,请参考以下文章

用两个图例更改 ggplot 中的两个图例标题

ggplot2中的图例标题位置

如何更改按变量因子分类的ggplot的图例标题

如何更改ggplot图例以使“填充”是正方形而“线型”是线?

如何在ggplot中更改不同数据集的线条颜色并具有图例

无法在 R 中使用 ggplot2 更改图例标题和标签