繁体   English   中英

如何格式化ggplot2图例中的标签?

[英]How to format labels in ggplot2 legend?

我有一个ggplot2图,它按两个变量对数据进行分组,并且我想对标签文本的格式进行一些控制。 下面使用nlme软件包中的Oxboys数据集说明了此问题。 我在数据中添加了一个名为“标签”的列,这样,“主题”现在可以通过“主题”和“标签”的组合来唯一标识。 在我实际使用的数据中,感兴趣的两个变量是x,y坐标,它们唯一地标识网格上的点,因此下面的输出格式建议很奇怪。

以最高的图例项目为例,我们如何重新设置格式以使其显示为:“ 10 10”或“ 10,10”或“10ºN,10ºW” *? 有什么方法可以利用sprintf()还是可以完全考虑另一种方法?

一种解决方法是在数据框中创建一个新列以定义组并提供标签。 这比直接在gglpot中进行格式化要少吗?

library(nlme)
library(ggplot2)
df <- transform(Oxboys, label = Subject)
p <- ggplot(df, aes(x = Occasion, y = height,
                    group = interaction(Subject, label),
                    color = interaction(Subject, label)))
p + geom_line()

在此处输入图片说明

*奖励指向更改图例标题的答案。

一种解决方法是在数据框中创建一个新列以定义组并提供标签。

这没什么问题,这暗含着您通过使用interaction所做的事情。 如果由于某种原因而不想进行interaction ,则可以指定一个分隔符:

interaction(Subject, label, sep=" ") # 10 10

但是最好按照您的建议去做,并在数据中创建一个明确的列:

df$Group <- paste(df$Subject, "N ", df$label, "W") # 10N 10W

然后,您只需在美学映射中使用它即可。 当然,这将使图例的标题为“组”,但是您可以通过命名适当的比例来更改图例标题:

p + scale_color_discrete("Your Title")

您还可以在Hadley的plyr软件包中使用重revalue ,我相信正是出于这个目的而编写的。

library(plyr)

# Rename Subject column
replace.Subject <- sapply(levels(df$Subject), function(x) paste0(x, " N"))
df$Subject <- revalue(df$Subject, replace.Subject)

# Rename label column
replace.label <- sapply(levels(df$label), function(x) paste0(x, " W"))
df$label <- revalue(df$label, replace.label)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM