1

我有一个 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()

在此处输入图像描述

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

4

2 回答 2

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")
于 2013-11-04T22:01:59.193 回答
0

您也可以revalue在 Hadley 的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)
于 2013-11-04T22:46:21.427 回答