R 在函数或循环中将多个过滤器作为参数传递,并创建ggplot图表
我有以下数据集R 在函数或循环中将多个过滤器作为参数传递,并创建ggplot图表,r,ggplot2,R,Ggplot2,我有以下数据集 Date <- c("01-01-2018"," 01-01-2018"," 01-02-2018","01-02-2018"," 01-03-2018"," 01-04-2018","01-04-2018"," 01-05-2018"," 01-06-2018","01-05-2018"," 01-06-2018"," 01-07-2018") Metro <- c('BA',"FL","BA","CA","BA","FL","BA","CA","BA","FL",
Date <- c("01-01-2018"," 01-01-2018"," 01-02-2018","01-02-2018"," 01-03-2018"," 01-04-2018","01-04-2018"," 01-05-2018"," 01-06-2018","01-05-2018"," 01-06-2018"," 01-07-2018")
Metro <- c('BA',"FL","BA","CA","BA","FL","BA","CA","BA","FL","BA","CA")
Type <- c("S2", "S1", "S3", "S2", "S1", "S3", "S2", "S1", "S3", "S2", "S1", "S3")
Forecast1 <- c(123,131,120,128,131,152,128,141, 129, 147, 155, 144)
Forecast2 <- c(152,128,141, 129, 147, 155, 144,123,131,120,128,131)
df <- cbind.data.frame(Date,Metro,Type, Forecast1, Forecast2)
df
Date Metro Type Forecast1 Forecast2
1 01-01-2018 BA S2 123 152
2 01-01-2018 FL S1 131 128
3 01-02-2018 BA S3 120 141
4 01-02-2018 CA S2 128 129
5 01-03-2018 BA S1 131 147
6 01-04-2018 FL S3 152 155
7 01-04-2018 BA S2 128 144
8 01-05-2018 CA S1 141 123
9 01-06-2018 BA S3 129 131
10 01-05-2018 FL S2 147 120
11 01-06-2018 BA S1 155 128
12 01-07-2018 CA S3 144 131
Date分组,然后右键连接参数列表,只剩下所需的组。在组中嵌套数据将允许您创建一个新列,其中每个条目都是计算的ggplot对象
library(tidyverse)
required_df <- tibble(Metro = c("BA", "FL"),
Type = c("S2", "S1")) %>%
expand(Metro, Type)
df %>%
group_by(Metro, Type) %>%
nest() %>%
right_join(required_df, by = c("Metro", "Type")) %>%
mutate(g = map(
data,
~ ggplot(., aes(x = as.Date(Date), y = Forecast1)) +
geom_line(color = "red", size = 1) +
geom_line(aes(y = Forecast2), color = "blue", size = 1) +
ylab("Forecast") +
xlab("Date")
))
库(tidyverse)
所需的_df%
扩展(Metro,类型)
df%>%
分组依据(地铁,类型)%>%
嵌套()%>%
右连接(必需的,由=c(“地铁”,“类型”))%>%
变异(g=map)(
数据,
~ggplot(,aes(x=as.Date(日期),y=Forecast1))+
几何尺寸线(颜色=“红色”,尺寸=1)+
geom_线(aes(y=Forecast2),color=“blue”,size=1)+
ylab(“预测”)+
xlab(“日期”)
))
输出:
Metro Type data g
<chr> <chr> <list> <list>
1 BA S1 <tibble [2 x 3]> <S3: gg>
2 BA S2 <tibble [2 x 3]> <S3: gg>
3 FL S1 <tibble [1 x 3]> <S3: gg>
4 FL S2 <tibble [1 x 3]> <S3: gg>
地铁类型数据g
1 BA S1
2 BA S2
3楼S1
4层S2
当然,您可以使用
$g
访问图形向量,谢谢Jack。地铁和地铁类型的总组合超过200个。我分享了部分数据和组合。有没有办法只为参数中传递的值的组合生成图表?@amark我将更新我的答案。。在您的示例中,是否需要指定参数的组合?例如“BA”和“S1”是。在我的例子中,有4种组合。BA和S1、BA和S2、FL和S1以及FL和S2。因此,只应生成4个图表。
library(tidyverse)
required_df <- tibble(Metro = c("BA", "FL"),
Type = c("S2", "S1")) %>%
expand(Metro, Type)
df %>%
group_by(Metro, Type) %>%
nest() %>%
right_join(required_df, by = c("Metro", "Type")) %>%
mutate(g = map(
data,
~ ggplot(., aes(x = as.Date(Date), y = Forecast1)) +
geom_line(color = "red", size = 1) +
geom_line(aes(y = Forecast2), color = "blue", size = 1) +
ylab("Forecast") +
xlab("Date")
))
Metro Type data g
<chr> <chr> <list> <list>
1 BA S1 <tibble [2 x 3]> <S3: gg>
2 BA S2 <tibble [2 x 3]> <S3: gg>
3 FL S1 <tibble [1 x 3]> <S3: gg>
4 FL S2 <tibble [1 x 3]> <S3: gg>