如何在ggplot中更改图例标题

时间:2013-01-31 09:31:10

标签: r plot ggplot2

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

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

13 个答案:

答案 0 :(得分:289)

这应该有效:

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

答案 1 :(得分:156)

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

 + labs(color='NEW LEGEND TITLE') 

可能没有用。但是,如果您用 填充 替换 颜色 ,它就可以了!

+ labs(fill='NEW LEGEND TITLE') 

这在ggplot2_2.1.0

中对我有用

答案 2 :(得分:37)

由于你有两个密度我想你可能想用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"))

enter image description here

答案 3 :(得分:14)

以上代码对我都不起作用。

这是我发现的并且有效。

labs(color = "sale year")

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

labs(color = 'sale year\n")

答案 4 :(得分:13)

由于在您的代码中使用ggplot(data, fill= cond)来创建直方图,您还需要使用&#34; fill&#34;来添加图例标题。在标签部分,即+labs(fill="Title name")。如果您使用的代码类型为ggplot(data,color = cond),则可以使用+labs(colour= "Title Name")。总之,lab参数必须与aes参数匹配。

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

答案 5 :(得分:5)

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

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

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

如非常好ggplot docs所示。

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

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

您还可以通过为guides的通话指定这些参数来改变形状/颜色/尺寸。

答案 6 :(得分:2)

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

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

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

答案 9 :(得分: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"

,它将更改标签标题。

答案 10 :(得分:0)

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

read.table(sep = '\t')

或者通过使用CSV格式的默认负载参数:

read.csv()

此装置就可以直接将该名称"NEW LEGEND TITLE"作为列名(标题)在原始数据文件中,以避免在每一个曲线图指定一个新的图例标题。

答案 11 :(得分:0)

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

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

答案 12 :(得分:-2)

ggplot(df) + labs(legend = '<legend_title>')