Как связать древовидную карту (графически) и датированную? - PullRequest
1 голос
/ 21 апреля 2020

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

df = data.frame(
  labels  = c("TOP",   "A", "a1", "a1", "a2", "a2"),
  parents = c(   NA, "TOP", "A",  "A",   "A",  "A"),
  values  = c(   36,    36,   1,   11,    2,    22),
  id      = 1:6)

dfs = crosstalk::SharedData$new(df, key = ~labels)

tab = DT::datatable(dfs)

library(dplyr)
library(plotly)

plt = plot_ly(dfs) %>% 
  group_by(parents, labels) %>%
  summarise(values = sum(values, na.rm = TRUE)) %>% 
  add_trace(type = "treemap", labels = ~labels, parents = ~parents,
            values = ~values)

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

Следующее отображает таблицу и древовидную карту, но они не кажутся связанными, так как нажатие на одно ничего не делает с другим:

crosstalk::bscols(tab, plt)

Без суммирования эти два, кажется, общаются друг с другом (ie. Щелчок в древовидной карте изменяет, какие строки отображаются в таблице), но древовидная карта очень повреждена (слишком много способов описать ).

plt = plot_ly(dfs) %>% 
  add_trace(type = "treemap", labels = ~labels, parents = ~parents,
            values = ~values) 

crosstalk::bscols(tab, plt)

Как это сделать правильно?

...