使用ggplot2和data.table生成多个.pdfs会在每个绘图上生成所有数据

时间:2013-08-17 02:41:09

标签: r ggplot2 data.table

我有与之前相同的例子(interpolation of grouped data using data.table),但在这里我试图使用ggplot2为每个site_no创建一个.pdf图。所有图中的所有数据都打印在每个名为.pdf的site_no上,而不是打印在单个.pdf上的每个site_no的数据。你能帮忙吗?

谢谢。

Irucka

library(data.table)
library(ggplot2)

tempbigdata1 <- data.table(c(14.80, 14.81, 14.82), c(7900, 7920, 7930),      c("02437100", "02437100", "02437100"))

tempbigdata2 <- data.table(c(9.98, 9.99, 10.00), c(816, 819, 821), c("02446500", "02446500", "02446500"))

tempbigdata3 <- data.table(c(75.65, 75.66, 75.67), c(23600, 23700, 23800), c("02467000", "02467000", "02467000"))

tempsbigdata <- rbind(tempbigdata1, tempbigdata2, tempbigdata3)

setnames(tempsbigdata,c("depth", "discharge", "site_no"))

setkey(tempsbigdata, site_no)

tempsbigdata
depth       discharge   site_no
1: 14.80    7900        02437100
2: 14.81    7920        02437100
3: 14.82    7930        02437100
4:  9.98    816         02446500
5:  9.99    819         02446500
6: 10.00    821         02446500
7: 75.65    23600       02467000
8: 75.66    23700       02467000
9: 75.67    23800       02467000

ratingsplot <- tempsbigdata[,list(discharge,depth),by=site_no]

for (u in unique(ratingsplot$site_no)) {pdf(file = file.path("/plots/",   paste0(u, "_rating.pdf", sep = "")))
p <- ggplot(ratingsplot, aes(x = discharge, y = depth, group = site_no))
print(p <- p + geom_point() + theme_bw())
dev.off()
}  

2 个答案:

答案 0 :(得分:1)

您需要实际对data.table进行子集化。 E.g:

p <- ggplot(ratingsplot[J(site_no=u)], aes(x = discharge, y = depth, group = site_no))

(另外,调用file.path时不需要斜杠;这些是由函数添加的。)

答案 1 :(得分:1)

尝试将数据参数修改为ggplot(ratingsplot[site_no==u],...

 p <- ggplot(ratingsplot[site_no==u], 
             aes(x = discharge, y = depth, group = site_no))

其他绘图范例有一个subset参数,它接受在data参数的环境中解释的逻辑表达式,但我没有看到一个记录或链接到`?ggplot帮助页面。