Использование клея для включения информации о выбранном наблюдении

Вопрос или проблема

Я хотел бы, чтобы мой ggplot отображал выбранный мной штат для лучшей ясности, но кажется, что glue ищет только первое наблюдение, а не желаемый результат.

library(tidyverse)
library(glue)
death_state=read_csv("https://raw.githubusercontent.com/MoH-Malaysia/covid19-public/main/epidemic/deaths_state.csv")
death_state=death_state%>%
  select(date,state,deaths_new,deaths_new_dod)%>%
  filter(between(date,max(date)-months(6),max(date)))%>%
  rename(Reported=deaths_new,Actual=deaths_new_dod)%>%
  pivot_longer(c(Reported,Actual),names_to="Reported/Actual",values_to="Deaths")%>%
  rename_with(str_to_title)%>%
  mutate(State=ifelse(State %in% c("W.P. Kuala Lumpur","Selangor","W.P. Putrajaya"), 'Klang Valley', State)) %>%
  group_by(Date,State,`Reported/Actual`) %>%
  summarise(Deaths = sum(Deaths), .groups="drop")

До настоящего момента созданный датафрейм выглядит следующим образом:

# A tibble: 5,180 x 4
   Date       State        `Reported/Actual` Deaths
   <date>     <chr>        <chr>              <dbl>
 1 2021-03-11 Johor        Actual                 1
 2 2021-03-11 Johor        Reported               2
 3 2021-03-11 Kedah        Actual                 0
 4 2021-03-11 Kedah        Reported               0
 5 2021-03-11 Kelantan     Actual                 0
 6 2021-03-11 Kelantan     Reported               1
 7 2021-03-11 Klang Valley Actual                 3
 8 2021-03-11 Klang Valley Reported               5
 9 2021-03-11 Melaka       Actual                 0
10 2021-03-11 Melaka       Reported               0
# ... с 5,170 дополнительными строками

Когда я попытался выполнить следующий код, он отображает только первое наблюдение, а не выбранный штат, и я был бы благодарен за помощь с этим. Спасибо.

death_state%>%
  filter(State %in% "Kedah")%>%
  ggplot(mapping=aes(fill=`Reported/Actual`,x=Date,y=Deaths,colour=`Reported/Actual`))+
  geom_line(size=0.75)+
  scale_colour_manual(values=c("black","firebrick2"))+
  labs(title=glue("Смерти по штатам
                  {death_state$State}"))

Ваш вывод показывает количество смертей для Кедаха только, но в заголовке печатается Джохор.

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

И, вместо glue, я использовал простой paste0.

Решение:

selected_state <- 'Kedah'

death_state%>%
  filter(State %in% selected_state)%>%
  ggplot(mapping=aes(fill=`Reported/Actual`,x=Date,y=Deaths,colour=`Reported/Actual`))+
  geom_line(size=0.75)+
  scale_colour_manual(values=c("black","firebrick2"))+
  ggtitle(paste0('Смерти по штатам: \n', selected_state))

Вывод

Сообщите, если у вас есть еще вопросы!

Ответ или решение

Статья: Эффективное использование функции glue для отображения информации о выбранном состоянии в ggplot

Введение
Работа с визуализацией данных — это ключевая составляющая анализа, позволяющая извлекать ценную информацию из больших массивов данных. В данном контексте мы рассмотрим, как правильно использовать пакет glue для формирования настраиваемых заголовков графиков в R, основываясь на выбранном состоянии из набора данных о смертности от COVID-19. Это поможет улучшить четкость и визуальную привлекательность вашего графика.

Описание проблемы
В процессе работы с данным набором данных была зафиксирована проблема: при попытке отобразить график для определенного состояния (например, Кедах) заголовок графика все равно отображал данные для первого состояния (например, Джохор). Это привело к путанице при интерпретации графика, так как он не соответствовал выделенному состоянию.

Анализ предоставленного кода
Исходный код, с которым вы работаете, таков:

library(tidyverse)
library(glue)

death_state <- read_csv("https://raw.githubusercontent.com/MoH-Malaysia/covid19-public/main/epidemic/deaths_state.csv")
death_state <- death_state %>%
  select(date, state, deaths_new, deaths_new_dod) %>%
  filter(between(date, max(date) - months(6), max(date))) %>%
  rename(Reported = deaths_new, Actual = deaths_new_dod) %>%
  pivot_longer(c(Reported, Actual), names_to = "Reported/Actual", values_to = "Deaths") %>%
  rename_with(str_to_title) %>%
  mutate(State = ifelse(State %in% c("W.P. Kuala Lumpur", "Selangor", "W.P. Putrajaya"), 'Klang Valley', State)) %>%
  group_by(Date, State, `Reported/Actual`) %>%
  summarise(Deaths = sum(Deaths), .groups = "drop")

При попытке создания визуализации была использована следующая конструкция:

death_state %>%
  filter(State %in% "Kedah") %>%
  ggplot(mapping = aes(fill = `Reported/Actual`, x = Date, y = Deaths, colour = `Reported/Actual`)) +
  geom_line(size = 0.75) +
  scale_colour_manual(values = c("black", "firebrick2")) +
  labs(title = glue("Deaths by State: {death_state$State}"))

Однако вместо корректного отображения заголовка для состояния Кедах функция glue выводила заголовок для первого состояния из набора данных.

Решение проблемы
Для более гибкого и правильного подхода я рекомендую создать переменную, хранящую выбранное состояние, и использовать её для формирования заголовка. Это позволит избежать ошибки и подготовить код к более универсальному использованию. Ниже приведен исправленный код:

selected_state <- 'Kedah'

death_state %>%
  filter(State %in% selected_state) %>%
  ggplot(mapping = aes(fill = `Reported/Actual`, x = Date, y = Deaths, colour = `Reported/Actual`)) +
  geom_line(size = 0.75) +
  scale_colour_manual(values = c("black", "firebrick2")) +
  ggtitle(paste0('Deaths by State: ', selected_state))

Как видно из кода, вместо glue используем функцию paste0, что также упрощает процесс формирования заголовка и устраняет неоднозначности. Создание переменной selected_state позволяет не модифицировать код на каждом этапе в зависимости от выбранного состояния.

Заключение
Правильное использование функций визуализации в R, таких как ggplot и glue, критически важно для ясного представления данных. Исправив код и изменив подход к формированию заголовков графиков, вы существенно повысите качество и информативность своих визуализаций. Надеюсь, это поможет вам избежать путаницы и сосредоточиться на предложении актуальной информации в ваших анализах. Если у вас есть дополнительные вопросы или потребности в помощи, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...