Я хочу иметь возможность выбрать квадрант в древовидной карте и иметь соответствующие точки данных, показанные в таблице. Я попытался использовать кроссстолк:
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)
Как это сделать правильно?