gpt4 book ai didi

r - 在ggplot2中使用for循环排列多个图表

转载 作者:行者123 更新时间:2023-12-02 05:08:01 30 4
gpt4 key购买 nike

我想生成一份显示多个图表的 pdf,每个 NetworkTrackingPixelId 一个图表。我有一个与此类似的数据框:

> head(data)
NetworkTrackingPixelId Name Date Impressions
1 2421 Rubicon RTB 2014-02-16 168801
2 2615 Google RTB 2014-02-16 1215235
3 3366 OpenX RTB 2014-02-16 104419
4 3606 AppNexus RTB 2014-02-16 170757
5 3947 Pubmatic RTB 2014-02-16 68690
6 4299 Improve Digital RTB 2014-02-16 701

我正在考虑使用类似于以下脚本的脚本:

# create a vector which stores the NetworkTrackingPixelIds
tp <- data %.%
group_by(NetworkTrackingPixelId) %.%
select(NetworkTrackingPixelId)

# create a for loop to print the line graphs
for (i in tp) {
print(ggplot(data[which(data$NetworkTrackingPixelId == i), ], aes(x = Date, y = Impressions)) + geom_point() + geom_line())
}

我预计此命令会生成许多图表,每个 NetworkTrackingPixelId 一个图表。相反,结果是一个聚合所有 NetworkTrackingPixelId 的独特图表。

我注意到的另一件事是变量tp不是一个真正的向量。

> is.vector(tp)
[1] FALSE

即使我强制它..

tp <- as.vector(data %.%
group_by(NetworkTrackingPixelId) %.%
select(NetworkTrackingPixelId))
> is.vector(tp)
[1] FALSE
> str(tp)
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 1397 obs. of 1 variable:
$ NetworkTrackingPixelId: int 2421 2615 3366 3606 3947 4299 4429 4786 6046 6286 ...
- attr(*, "vars")=List of 1
..$ : symbol NetworkTrackingPixelId
- attr(*, "drop")= logi TRUE
- attr(*, "indices")=List of 63
..$ : int 24 69 116 162 205 253 302 351 402 454 ...
..$ : int 1 48 94 140 184 232 281 330 380 432 ...

[I've cut a bit this output]

- attr(*, "group_sizes")= int 29 29 2 16 29 1 29 29 29 29 ...
- attr(*, "biggest_group_size")= int 29
- attr(*, "labels")='data.frame': 63 obs. of 1 variable:
..$ NetworkTrackingPixelId: int 8799 2615 8854 8869 4786 7007 3947 9109 9126 9137 ...
..- attr(*, "vars")=List of 1
.. ..$ : symbol NetworkTrackingPixelId

最佳答案

由于我没有您的数据集,因此我将使用 mtcars 数据集来说明如何使用 dplyrdata.table 来执行此操作>。这两个包都是 rstats 中 split-apply-combine 范例的最佳示例。让我解释一下:

第 1 步按档位拆分数据

  • dplyr 使用函数 group_by
  • data.table 使用参数 by

第 2 步:应用函数

  • dplyr 使用 do,您可以向其传递使用片段 x 的函数。
  • data.table 将变量解释为每个片段上下文中的函数。

第 3 步:合并

这里没有组合步骤,因为我们将创建的图表保存到文件中。

library(dplyr)
mtcars %.%
group_by(gear) %.%
do(function(x){ggsave(
filename = sprintf("gear_%s.pdf", unique(x$gear)), qplot(wt, mpg, data = x)
)})

library(data.table)
mtcars_dt = data.table(mtcars)
mtcars_dt[,ggsave(
filename = sprintf("gear_%s.pdf", unique(gear)), qplot(wt, mpg)),
by = gear
]

更新:要将所有文件保存到一个 pdf 中,这里有一个快速解决方案。

plots = mtcars %.%
group_by(gear) %.%
do(function(x) {
qplot(wt, mpg, data = x)
})

pdf('all.pdf')
invisible(lapply(plots, print))
dev.off()

关于r - 在ggplot2中使用for循环排列多个图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22464570/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com