Добавление заголовков динамических диаграмм в ggplot2 - PullRequest
1 голос
/ 25 марта 2019

Это следует из моего последнего вопроса.Я потратил час или около того, пытаясь понять, как передать переменную, которую я использую для фильтрации моего информационного кадра, в заголовок генерируемого графика.

Исходя из моих предыдущих вопросов.

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")

Я думал, что это

    x_label = "Area!!!"
    y_label = "Rate!!!"
    DATA%>%filter(DISEASE== "Marco Polio")%>%
          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(DATA$DISEASE)

Почему бы и нет?Он генерирует диаграмму для Марко Полио, но в качестве заголовка использует Chicky Pox.

Я хочу (ложный код) ggtitle == фильтр (болезнь)

Потому что я собираюсь сделатьпосле этого идите и мурлыкайте, чтобы получить каждую диаграмму для каждой инфекции, и я хотел бы озаглавить автоматически.

Ta.

РЕДАКТИРОВАТЬ: я попробовал предложенное ниже предложение, и оно невполне работа.

Я пробовал это

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 становится ФАКТОРОМ, когда он группируется?

Ответы [ 3 ]

3 голосов
/ 25 марта 2019

Кажется, вам нужна функция, в которой вы можете ввести болезнь и создать график.

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")

Или создать их все сразу ...

map(unique(DATA$DISEASE), disease_plot)
1 голос
/ 25 марта 2019

В конце концов, я воспользовался советом и помощью и Стивена, и Марка и применил их вместе с моим первоначальным планом идти и мурлыкать свой путь через него.

Вот оно:

    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"))
    })
1 голос
/ 25 марта 2019

Это потому, что вы используете весь DATA$DISEASE в качестве заголовка, и кажется, что он просто захватывает последнее значение в этом column. Гораздо проще сделать сначала фильтрованный dataframe, а затем передать его в plot.

df <- DATA%>%filter(DISEASE== "Marco Polio")

  ggplot(data = df, 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(df$DISEASE)

В конце концов, я решил, что решение будет не вызывать DATA $, а просто БОЛЕЗНЬ Тем не менее, это не работает должным образом при фильтрации для другого заболевания. Я думаю, что вы должны были бы включить DISEASE также внутри ggtitle, или лучше использовать первую функцию или другой ответ, опубликованный другим пользователем.

НЕ РАБОТАЕТ, КАК ОЖИДАЕТСЯ:

DATA%>%filter(DISEASE== "Marco Polio")%>%
  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)
...