Sta*_*tan 6 plot r 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)
Run Code Online (Sandbox Code Playgroud)
数据由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
Run Code Online (Sandbox Code Playgroud)
这会创建以下图:

相反,我想为每个by组创建一个单独的图,并将图标题从"Group:ALL"更改为"Group:a","Group:b","Group:c"等.数据文档.表说:
.BY是一个列表,其中包含每个项目的长度为1的向量by.当事先不知道时,这可能是有用的.该by变量也可用于j直接通过名称; 例如,对于图表的标题,如果j是绘图命令,或者用于分支,则是有用的if()
话虽这么说,我不明白如何使用.BY或.SD为每个组创建单独的图.非常感谢您的帮助.
这是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]
Run Code Online (Sandbox Code Playgroud)
你真正应该为这个特定的应用程序做什么是@dmartin推荐的.至少,这就是我要做的.
您可以在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)
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅ggplot文档.
| 归档时间: |
|
| 查看次数: |
967 次 |
| 最近记录: |