Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在函数或循环中将多个过滤器作为参数传递,并创建ggplot图表_R_Ggplot2 - Fatal编程技术网

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>