在 ggplot 中编辑图例(文本)标签

189

我花了几个小时查看文档和StackOverflow,但似乎没有一个解决方案可以解决我的问题。当使用ggplot时,即使它在我的数据框中,我也无法获得图例中的正确文本。我尝试过scale_colour_manualscale_fill_manual,并针对labels=使用不同的值,例如c("T999", "T888")","cols"

以下是我的代码:

T999 <- runif(10, 100, 200)
T888 <- runif(10, 200, 300)
TY <- runif(10, 20, 30)
df <- data.frame(T999, T888, TY)


ggplot(data = df, aes(x=T999, y=TY, pointtype="T999")) + 
       geom_point(size = 15, colour = "darkblue") + 
       geom_point(data = df, aes(x=T888, y=TY), colour = 'red', size = 10 ) + 
       theme(axis.text.x = element_text(size = 20), axis.title.x =element_text(size = 20),   axis.text.y = element_text(size = 20)) +
       xlab("Txxx") + ylab("TY [°C]") + labs(title="temperatures", size = 15) + 
       scale_colour_manual(labels = c("T999", "T888"), values = c("darkblue", "red")) +    theme(legend.position="topright")

这是上述代码的图形输出:

graphical output of ggplot code

非常感谢您的帮助!


11
请参考这个教程,找出ggplot最喜欢的数据格式(长格式,而非宽格式),并了解在aes调用中将aesthetic映射到变量与在aes之外进行设置之间的区别。你需要将数据转换为长格式,然后在aes中将colour(或fill)映射到相关变量。 - Henrik
@Henrik 谢谢你提供的食谱(在教程链接中),非常有帮助! - Wael
2个回答

223
@Henrik提到的教程是学习如何使用ggplot2包创建图表的绝佳资源。
一个使用您的数据的示例:
# transforming the data from wide to long
library(reshape2)
dfm <- melt(df, id = "TY")

# creating a scatterplot
ggplot(data = dfm, aes(x = TY, y = value, color = variable)) + 
  geom_point(size=5) +
  labs(title = "Temperatures\n", x = "TY [°C]", y = "Txxx", color = "Legend Title\n") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  theme(axis.text.x = element_text(size = 14), axis.title.x = element_text(size = 16),
        axis.text.y = element_text(size = 14), axis.title.y = element_text(size = 16),
        plot.title = element_text(size = 20, face = "bold", color = "darkgreen"))

这导致了:

enter image description here

如评论中@user2739472所提到的:如果你只想更改ggplot默认调色板中的图例文本标签而不更改颜色,你可以使用scale_color_hue(labels = c("T999", "T888"))代替scale_color_manual()

@Sathish 你可以看到,y轴的标题比x轴的标题小。不同的大小用于说明可能性及其后果。因此,在我看来,答案中使用的代码是正确的。 - Jaap
@Sathish 在我之前的评论中补充一点:这绝对是一个可行的选择!这完全取决于你想要实现什么目标;-) - Jaap
22
如果您只想更改ggplot默认调色板中的图例文本标签而不更改颜色,可以使用scale_color_hue(labels = c("T999", "T888"))而不是scale_color_manual() - user2739472
1
@user2739472 谢谢,非常正确。我会把它加入到我的答案中。 - Jaap
@Sathish,我有点晚了,但现在已经修正了拼写错误 :-) - Jaap

73

图例标题可以用特定的美学标记。

这可以通过ggplot2guides()labs()函数实现(更多信息在这里在这里)。它允许您使用审美映射添加指南/图例属性。

这是一个使用mtcars数据集和labs()的示例:

ggplot(mtcars, aes(x=mpg, y=disp, size=hp, col=as.factor(cyl), shape=as.factor(gear))) +
  geom_point() +
  labs(x="miles per gallon", y="displacement", size="horsepower", 
       col="# of cylinders", shape="# of gears")

在此输入图片描述

使用guides()回答问题:

# transforming the data from wide to long
require(reshape2)
dfm <- melt(df, id="TY")

# creating a scatterplot
ggplot(data = dfm, aes(x=TY, y=value, color=variable)) + 
  geom_point(size=5) +
  labs(title="Temperatures\n", x="TY [°C]", y="Txxx") +
  scale_color_manual(labels = c("T999", "T888"), values = c("blue", "red")) +
  theme_bw() +
  guides(color=guide_legend("my title"))  # add guide properties by aesthetic

输入图像描述


我不同意这个观点。仅指定标题时,更容易在scale_..labs参数中指定它。 - Jaap
1
我在评论你15分钟前的解决方案,其中添加了标题到scale_color_manual(title="...",...)。我看到你已经修改它以在labs()中引用颜色美学。我提供我的解决方案作为替代选择。 - Megatron
目前来看,如果图例为填充渐变,它似乎会修改为更加荒谬无意义的形式。 - Max Candocia

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