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

时间:2013-11-04 21:28:50

标签: r ggplot2

我有一个ggplot2图,它通过两个变量对数据进行分组,我想对标签文本的格式进行一些控制。下面使用nlme软件包中的Oxboys数据集说明了这个问题。我在数据中添加了一个名为“label”的列,以便“Subjects”现在由“Subject”和“label”组合唯一标识。在我实际使用的数据中,感兴趣的两个变量是唯一标识网格上点的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()

enter image description here

*更改图例标题的答案的奖励积分。

2 个答案:

答案 0 :(得分:0)

  

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

这没有任何问题,而且使用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")

答案 1 :(得分:0)

你也可以在Hadley的revalue包中使用plyr,我认为这是为了这个目的而编写的。

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)