Фильтрация исходных данных для графика сводной статистики – с использованием Plotly и Crosstalk в R

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

Я пытаюсь адаптировать пример отсюда plotly-r.com/client-side-linking

Цель состоит в том, чтобы отфильтровать исходные данные (txhousing) по году и создать сводный точечный график отсутствующих значений по городам. Вот моя попытка, но фильтр не работает. Есть ли у вас какие-либо предложения без использования shiny?

library(plotly)
library(crosstalk)

data(txhousing, package = "ggplot2")

tx <- highlight_key(txhousing, ~city)

# инициализация объекта plotly
base <- plot_ly(tx, color = I("black"))


dot_plot <- base %>% group_by(city) %>% 

  summarise(miss = sum(is.na(median))) %>%
  filter(miss > 0) %>%
  add_markers(
    x = ~miss, 
    y = ~forcats::fct_reorder(city, miss), 
    hoverinfo = "x+y"
  ) %>%
  layout(
    xaxis = list(title = "Количество пропущенных месяцев"),
    yaxis = list(title = "")
  ) 

bscols(
  filter_select("f","выбрать год", tx, ~year),
  dot_plot,
  widths = c(4,8)
)

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

Для решения вашей задачи по фильтрации данных и построению сводного точечного графика пропущенных значений по городам с использованием библиотек plotly и crosstalk в R, вам необходимо убедиться, что ваши данные правильно фильтруются в соответствии с выбранным годом. Ниже приведен скорректированный код, который осуществляет эту задачу:

# Загружаем необходимые библиотеки
library(plotly)
library(crosstalk)
library(dplyr)
library(forcats)

# Загружаем данные txhousing из пакета ggplot2
data(txhousing, package = "ggplot2")

# Используем highlight_key для связывания данных
tx <- highlight_key(txhousing, ~city)

# Создаем интерактивный объект plotly
base <- plot_ly(tx, color = I("black"))

# Поскольку фильтрация должна быть по годам из объекта crosstalk,
# мы можем использовать reactive данный crosstalk для фильтрации 
# и создания сводной таблицы с количеством пропущенных значений
dot_plot <- tx %>%
  group_by(city, year) %>% 
  summarise(miss = sum(is.na(median))) %>%
  filter(miss > 0) %>%
  group_by(city) %>%
  summarise(total_miss = sum(miss)) %>%
  add_markers(
    x = ~total_miss, 
    y = ~forcats::fct_reorder(city, total_miss), 
    hoverinfo = "x+y"
  ) %>%
  layout(
    xaxis = list(title = "Количество пропущенных месяцев"),
    yaxis = list(title = "")
  ) 

# Визуализируем результат
bscols(
  filter_select("f", "Выберите год", tx, ~year),
  dot_plot,
  widths = c(4, 8)
)

В этом примере:

  1. Мы добавили использование group_by(year) в сводной таблице, чтобы учитывать выбранный год при подсчете пропущенных значений. Это изменение необходимо, чтобы данные фильтровались по годам.

  2. Обновили создание точечного графика, чтобы он показывал общее количество пропущенных значений по каждому городу, а не только за выбранный год.

  3. Убедитесь, что установлен и загружен пакет forcats, так как он используется для упорядочивания городов в графике.

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

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

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