data.table中的数据驱动的绘图名称

时间:2014-01-15 23:18:45

标签: r plot ggplot2 data.table

这是学习data.table包语法的个人项目。我正在尝试使用数据值创建多个图表,并根据by组值标记每个图表。例如,给出以下数据:

# Generate dummy data
require(data.table)

set.seed(222)
DT = data.table(grp=rep(c("a","b","c"),each=10), 
 x = rnorm(30, mean=5, sd=1), 
 y = rnorm(30, mean=8, sd=1))

setkey(DT, grp)

数据由3组(a,b和c)的随机x和y值组成。我可以使用以下代码创建所有值的格式化图:

# Example of plotting all groups in one plot
require(ggplot2)

p <- ggplot(data=DT, aes(x = x, y = y)) + 
  aes(shape = factor(grp))+
  geom_point(aes(colour = factor(grp), shape = factor(grp)), size = 3) +
  labs(title = "Group: ALL")
p

这会创建以下图表: Plot of all groups

相反,我想为每个by组创建一个单独的图,并将图标题从“Group:ALL”更改为“Group:a”,“Group:b”,“Group:c”等.Data.table的documentation说:

  

.BY是一个列表,其中包含by中每个项目的长度为1的向量。当事先不知道时,这可能是有用的。 by变量也可以直接按名称提供给j;例如,对于图表的标题,如果j是绘图命令,或者使用if()分支

话虽如此,我不明白如何使用.BY.SD为每个组创建单独的图。感谢您的帮助。

3 个答案:

答案 0 :(得分:9)

以下是data.table解决方案,但不是我的建议:

make_plot <- function(dat, grp.name) {
  print(
    ggplot(dat, aes(x=x, y=y)) + 
    geom_point() + labs(title=paste0("Group: ", grp.name$grp))
  )
  NULL
}    
DT[, make_plot(.SD, .BY), by=grp]

你应该为@dmartin推荐的特定应用程序做些什么。至少,这就是我要做的。

答案 1 :(得分:5)

您可以在ggplot中使用带有labeller参数的facet_grid,而不是使用data.table:

p <- ggplot(data=DT, aes(x = x, y = y)) + aes(shape = factor(grp)) +
     geom_point(aes(colour = factor(grp), shape = factor(grp)), size = 3) + 
     facet_grid(. ~ grp, labeller = label_both)

有关详细信息,请参阅ggplot documentation

答案 2 :(得分:2)

我看到你已经有了“facetting”选项。我做了这个

 p+facet_wrap('grp')

但是这给出了相同的结果:

 p+facet_wrap(~grp)

enter image description here