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


120

我已经花了几个小时在文档和StackOverflow上查找,但是似乎没有解决方案可以解决我的问题。使用时ggplot,即使它在我的数据框中,我也无法在图例中获得正确的文本。我已经尝试过scale_colour_manual,例如scale_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")

帮助将不胜感激!


8
看看这个教程,以找出哪些数据格式ggplot是最高兴(长,不宽),并获得之间的差额的感觉映射aes正题在一个变量aes调用,对设置外面aes。您需要将melt数据格式化为长格式,然后映射colour(或fillaes到相关变量中。
亨里克

Answers:


145

提到的教程@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在评论中所提到的:如果只想更改图例文本标签而不是ggplot默认调色板的颜色,则可以使用scale_color_hue(labels = c("T999", "T888"))代替scale_color_manual()


@Sathish如您所见,y轴的标题小于x轴的标题。不同的大小用于说明可能性及其后果。因此,答案中使用的代码是正确的imo。
Jaap

@Sathish添加到我的先前评论:这样做绝对是一种选择!这完全取决于您想要实现的目标;-)
Jaap

9
如果你只是想改变ggplot的默认调色板图例文本标签,而不是颜色,你可以使用scale_color_hue(labels = c("T999", "T888")),而不是scale_color_manual()
user2739472

1
@ user2739472谢谢&真。将其添加到我的答案。
Jaap

@Sathish我迟到了,但是现在解决了错字:-)
Jaap

41

传奇标题可以用特定的美学来标记。

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

这是使用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参数中更容易指定标题。
Jaap,

我15分钟以前就在您的解决方案上发表评论,该解决方案的名称已添加到scale_color_manual(title="...", ...)。我看到您已对其进行了修改,以引用中的色彩美学labs()。我提供我的解决方案作为替代方案。
威震天

到现在为止,如果它是填充梯度,则似乎会修改图例,使其变得更没有意义。
Max Candocia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.