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

Posted

技术标签:

【中文标题】在 ggplot 中编辑图例(文本)标签【英文标题】:Editing legend (text) labels in ggplot 【发布时间】:2014-07-01 09:18:04 【问题描述】:

我花了几个小时查看文档和 ***,但似乎没有解决方案可以解决我的问题。使用 ggplot 时,我无法在图例中获得正确的文本,即使它在我的数据框中。我尝试了scale_colour_manualscale_fill_manuallabels= 的不同值,例如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")

非常感谢您的帮助!

【问题讨论】:

查看this tutorial,找出ggplot 最满意的数据格式(长而不是宽),并感受映射 i> 一个aesthetic 到aes 调用中的一个变量,而不是在aes 之外设置它。您需要将melt 数据转换为长格式,并将aes 中的colour(或fill)映射到相关变量。 【参考方案1】:

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

这会导致:

正如 @user2739472 在 cmets 中提到的:如果您只想更改图例文本标签而不是 ggplot 的默认调色板中的颜色,您可以使用 scale_color_hue(labels = c("T999", "T888")) 而不是 scale_color_manual()

【讨论】:

@Sathish 可以看到,y 轴的标题小于 x 轴的标题。不同的大小用于说明可能性及其后果。因此,答案中使用的代码是正确的imo。 @Sathish 添加到我之前的评论中:这样做当然是一种选择!这完全取决于您想要实现的目标;-) 如果您只想更改图例文本标签而不是 ggplot 默认调色板中的颜色,您可以使用scale_color_hue(labels = c("T999", "T888")) 而不是scale_color_manual() @user2739472 谢谢,真的。将其添加到我的答案中。 @Sathish 我来晚了,但现在修正了错字:-)【参考方案2】:

图例标题可以通过特定的审美来标记。

这可以使用ggplot2 中的guides()labs() 函数来实现(更多here 和here)。它允许您使用美学映射添加指南/图例属性。

这是一个使用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()回答OP的问题:

# 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 参数中指定。 我在 15 分钟前评论了您的解决方案,并将标题添加到 scale_color_manual(title="...", ...)。我看到你已经修改了它以引用labs() 中的颜色美学。我提供我的解决方案作为替代方案。 到目前为止,如果它是填充渐变,这似乎会修改图例,使其更加荒谬。

以上是关于在 ggplot 中编辑图例(文本)标签的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ggplot2编辑图例的位置

ggplot2:顶部图例键符号大小随图例键标签而变化

使用长标签名称设置标准图例键大小 ggplot

ggplot2 没有坐标轴、图例等的绘图

使用文本标记最小和最大刻度填充渐变图例:ggplot2

如何在谷歌电子表格图中编辑图例标签?