R 在ggplot2中添加动态图表标题

R 在ggplot2中添加动态图表标题,r,ggplot2,dynamic,iteration,R,Ggplot2,Dynamic,Iteration,这是我最后一个问题的后续内容。我花了一个小时左右的时间试图找出如何将用于过滤数据帧的变量传递到生成的图形标题 下面是我之前的问题 library (tidyverse) library (epitools) # here's my made up data DISEASE = c("Marco Polio","Marco Polio","Marco Polio","Marco Polio","Marco Polio", "Mumps","Mumps","Mumps"

这是我最后一个问题的后续内容。我花了一个小时左右的时间试图找出如何将用于过滤数据帧的变量传递到生成的图形标题

下面是我之前的问题

library (tidyverse)
library (epitools)


# here's my made up data

DISEASE = c("Marco Polio","Marco Polio","Marco Polio","Marco Polio","Marco Polio",
            "Mumps","Mumps","Mumps","Mumps","Mumps",
            "Chicky Pox","Chicky Pox","Chicky Pox","Chicky Pox","Chicky Pox")
YEAR = c(2011, 2012, 2013, 2014, 2015,
         2011, 2012, 2013, 2014, 2015,
         2011, 2012, 2013, 2014, 2015)
VALUE = c(82,89,79,51,51,
          79,91,69,89,78,
          71,69,95,61,87)
AREA =c("A", "B","C")

DATA = data.frame(DISEASE, YEAR, VALUE,AREA)

DATA<-
DATA %>%
  mutate(POPN = case_when(
    AREA == "A" ~ 2.5,
    AREA == "B" ~ 3,
    AREA == "C" ~ 7,
    TRUE ~ 0)) %>%
  group_by(DISEASE,AREA,POPN) %>%
  count(AREA) %>%
  mutate(res = list(pois.byar(n, POPN))) %>%
  unnest()

DATA%>%filter(DISEASE== "Marco Polio")%>%
  ggplot(aes(x=AREA, y=rate)) +geom_point() +
  geom_hline(aes(yintercept=rate[AREA == "A"]), 
             linetype="dashed", color = "red")
为什么不呢? 它生成了马可·脊髓灰质炎的图表,但以水痘为标题

我想要的是假代码 ggtitle==过滤器疾病

因为在这之后我要做的是散步和呼噜声,以获得每一个感染的图表,我想自动命名

助教

编辑: 我试过下面的建议,但不太管用

我试过这个

DATA%>%filter(DISEASE== "Mumps")%>%
  ggplot(aes(x=AREA, y=rate)) +geom_point() +
  geom_hline(aes(yintercept=rate[AREA == "A"]), 
             linetype="dashed", color = "red")+
  ggtitle(paste(DISEASE))


DATA%>%filter(DISEASE== "Mumps")%>%
  ggplot(aes(x=AREA, y=rate)) +geom_point() +
  geom_hline(aes(yintercept=rate[AREA == "A"]), 
             linetype="dashed", color = "red")+
  ggtitle(as.character(DISEASE))
没有运气


它是否与疾病在分组时成为一个因素有关?

这是因为您使用整个数据$DISEASE作为标题,而它似乎只抓住了该列中的最后一个值。更简单的方法是先制作一个经过过滤的数据帧,然后将其输入到绘图中


这是因为您使用了整个数据$DISEASE作为标题,它似乎只获取了该列中的最后一个值。更简单的方法是先制作一个经过过滤的数据帧,然后将其输入到绘图中


似乎您需要一个函数,可以在其中输入疾病并创建绘图

disease_plot <- function(disease_of_interest) {
  DATA %>%
    filter(DISEASE == disease_of_interest) %>%
    ggplot(aes(x = AREA, y = rate)) + 
        geom_point() +
        geom_hline(aes(yintercept = rate[AREA == "A"]),
          linetype = "dashed", color = "red") +
        # labs(x = x_label, y = y_label) +
        ggtitle(disease_of_interest)
}

disease_plot("Marco Polio")
disease_plot("Chicky Pox")
disease_plot("Mumps")

似乎您需要一个函数,可以在其中输入疾病并创建绘图

disease_plot <- function(disease_of_interest) {
  DATA %>%
    filter(DISEASE == disease_of_interest) %>%
    ggplot(aes(x = AREA, y = rate)) + 
        geom_point() +
        geom_hline(aes(yintercept = rate[AREA == "A"]),
          linetype = "dashed", color = "red") +
        # labs(x = x_label, y = y_label) +
        ggtitle(disease_of_interest)
}

disease_plot("Marco Polio")
disease_plot("Chicky Pox")
disease_plot("Mumps")

最后,我接受了斯蒂芬和马克的建议和帮助,并将其与我最初的计划拼凑在一起,以步行和呼噜声度过难关

这是:

    walk(unique(DATA$DISEASE), function(disease_of_interest) {
      p <- DATA%>%filter(DISEASE== !!disease_of_interest)%>%
      ggplot(aes(x=AREA, y=rate,y=rate, 
      ymin = rate-lower, ymax = rate+upper))+ 
      geom_point() +
      geom_hline(aes(yintercept=rate[AREA == "A"]), 
                   linetype="dashed", color = "red")+
      labs(x = x_label,y = y_label),+
      ggtitle(paste0("Number of ",disease_of_interest,
      " in 2018"))+
      geom_errorbar(aes(ymin=lower, ymax=upper), width=.1)
      print(p)
      ggsave(paste("drive path",disease_of_interest, "plot.png"))+
      scale_x_discrete(limits=c("C","A","B"))
    })

最后,我接受了斯蒂芬和马克的建议和帮助,并将其与我最初的计划拼凑在一起,以步行和呼噜声度过难关

这是:

    walk(unique(DATA$DISEASE), function(disease_of_interest) {
      p <- DATA%>%filter(DISEASE== !!disease_of_interest)%>%
      ggplot(aes(x=AREA, y=rate,y=rate, 
      ymin = rate-lower, ymax = rate+upper))+ 
      geom_point() +
      geom_hline(aes(yintercept=rate[AREA == "A"]), 
                   linetype="dashed", color = "red")+
      labs(x = x_label,y = y_label),+
      ggtitle(paste0("Number of ",disease_of_interest,
      " in 2018"))+
      geom_errorbar(aes(ymin=lower, ymax=upper), width=.1)
      print(p)
      ggsave(paste("drive path",disease_of_interest, "plot.png"))+
      scale_x_discrete(limits=c("C","A","B"))
    })


令人沮丧的是,它对我在这里使用的试验数据有效。但当我在实际数据上测试它时,它并没有。我得到了以下错误:rlang::list2…中的错误,title=title,subtitle=subtitle,caption=caption,:未找到对象“DISEASE”,我会怀疑输入错误或strdf对某些与测试数据不同的列显示了不同的格式并导致问题?基于我担心的一个评论,我无法帮助你。请接受测试数据的工作答案,我可以问一下你在哪里看吗?哦,我的意思是看,就像在阅读你的代码,找出我们做错了什么,然后改变它直到它工作。嗯。好啊我不想把这变成一个大规模的讨论,但我会看看如何比较两个分组的dateaframes测试数据和真实数据。令人沮丧的是,它在我这里使用的试验数据上起作用。但当我在实际数据上测试它时,它并没有。我得到了以下错误:rlang::list2…中的错误,title=title,subtitle=subtitle,caption=caption,:未找到对象“DISEASE”,我会怀疑输入错误或strdf对某些与测试数据不同的列显示了不同的格式并导致问题?基于我担心的一个评论,我无法帮助你。请接受测试数据的工作答案,我可以问一下你在哪里看吗?哦,我的意思是看,就像在阅读你的代码,找出我们做错了什么,然后改变它直到它工作。嗯。好啊我不想把这变成一个大规模的讨论,但我会看看如何比较两个分组的dateaframes测试和真实数据。显然,我需要开始研究如何编写函数。。。我认为这是思考问题的方式。非常感谢您的帮助和建议,Stephen和Mark。我将展示我已经拥有的功能,然后包括标题部分。我本不想在函数中包含标题,但我也不知道如何做。希望这样行吗?有意义吗?下面是@Tung:我重新检查了这里给出的答案,Stephen。它确实有效。我想我知道为什么了:在运行这个bit:labsx=x_标签,y=y_标签之前,我应该定义它们是什么。当它不起作用时,我发现我可以使用我已经拥有的功能,我把它放在了我的答案中。我会把你的答案记下来!抱歉。显然,我需要开始研究如何编写函数。。。我认为这是思考问题的方式。非常感谢您的帮助和建议,Stephen和Mark。我将展示我已经拥有的功能,然后包括标题部分。我本不想在函数中包含标题,但我也不知道如何做。希望这样行吗?有意义吗?下面是@Tung:我重新检查了这里给出的答案,Stephen。它确实有效。我想我知道为什么了:在运行这个bit:labsx=x_标签,y=y_标签之前,我应该定义它们是什么。当它不起作用时,我发现我可以使用我已经拥有的功能,我把它放在了我的答案中。我会把你的答案记下来!抱歉,你为什么要用!!在你的函数里面?简短的回答:我继承了这个函数来做这个。详细的回答:在dplyr和tidyeval中,你通常使用!!表示要取消引用输入,以便对其进行计算,而不是引用。这给了我们一个函数
实际上是我们想要的。所以我想它可以确保过滤器上的输入是正确的。你不需要!!使功能正常工作!!仅当您使用quo、enquo、sym、ensym等引用变量时才需要。谢谢Tung,我已经解释了为什么我没有将前面的答案标记为答案。我很感激,因为我认为斯蒂芬不会得到任何荣誉是不公平的。你的建议看起来很有意思,谢谢你的解释!!你为什么用!!在你的函数里面?简短的回答:我继承了这个函数来做这个。详细的回答:在dplyr和tidyeval中,你通常使用!!表示要取消引用输入,以便对其进行计算,而不是引用。这给了我们一个函数,它实际上实现了我们想要的。所以我想它可以确保过滤器上的输入是正确的。你不需要!!使功能正常工作!!仅当您使用quo、enquo、sym、ensym等引用变量时才需要。谢谢Tung,我已经解释了为什么我没有将前面的答案标记为答案。我很感激,因为我认为斯蒂芬不会得到任何荣誉是不公平的。你的建议看起来很有意思,谢谢你的解释!!
map(unique(DATA$DISEASE), disease_plot)
    walk(unique(DATA$DISEASE), function(disease_of_interest) {
      p <- DATA%>%filter(DISEASE== !!disease_of_interest)%>%
      ggplot(aes(x=AREA, y=rate,y=rate, 
      ymin = rate-lower, ymax = rate+upper))+ 
      geom_point() +
      geom_hline(aes(yintercept=rate[AREA == "A"]), 
                   linetype="dashed", color = "red")+
      labs(x = x_label,y = y_label),+
      ggtitle(paste0("Number of ",disease_of_interest,
      " in 2018"))+
      geom_errorbar(aes(ymin=lower, ymax=upper), width=.1)
      print(p)
      ggsave(paste("drive path",disease_of_interest, "plot.png"))+
      scale_x_discrete(limits=c("C","A","B"))
    })