Вопрос или проблема
Я хотел бы, чтобы мой 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, критически важно для ясного представления данных. Исправив код и изменив подход к формированию заголовков графиков, вы существенно повысите качество и информативность своих визуализаций. Надеюсь, это поможет вам избежать путаницы и сосредоточиться на предложении актуальной информации в ваших анализах. Если у вас есть дополнительные вопросы или потребности в помощи, не стесняйтесь обращаться.