Фон
Я использую API ploty в R для создания двух связанных графиков. Первый график представляет собой точечную диаграмму, а второй представляет собой столбчатую диаграмму, которая должна отображать процент данных, принадлежащих каждой категории, в текущем выборе. Я не могу заставить проценты вести себя как ожидалось.
Проблема
Графики отображаются правильно, и интерактивный выбор работает нормально. Когда я выбираю набор точек данных на верхнем точечном графике, я хотел бы видеть процент этого выбора, который принадлежит каждой категории. Вместо этого то, что я вижу, это процентное соотношение точек в этом выборе в этой категории, которые относятся к этой категории, другими словами, всегда 100%. Я предполагаю, что это потому, что я установил color = ~c
, который применяет группирование к категории.
Пример
Вот воспроизводимый пример для подражания. Сначала создайте несколько фиктивных данных.
library(plotly)
n = 1000
make_axis = function(n) c(rnorm(n, -1, 1), rnorm(n, 2, 0.25))
data = data.frame(
x = make_axis(n),
y = make_axis(n),
c = rep(c("A", "B"), each = n)
)
Создайте объект sharedData
и укажите его plot_ly()
для базового графика.
shared_data = data %>%
highlight_key()
baseplot = plot_ly(shared_data)
Создайте отдельные панели.
points = baseplot %>%
add_markers(x = ~x, y = ~y, color = ~c)
bars = baseplot %>%
add_histogram(x = ~c, color = ~c, histnorm = "percent", showlegend = FALSE) %>%
layout(barmode = "group")
И объедините их в связанный участок с выделением и выделением.
subplot(points, bars) %>%
layout(dragmode = "select") %>%
highlight("plotly_selected")
Вот снимок экрана этого, чтобы проиллюстрировать проблему.
Отклонение
Кстати, когда я устанавливаю histnorm = ""
в add_histogram()
, тогда я приближаюсь к ожидаемому поведению, но мне нужны проценты, а не подсчеты , Когда я удаляю color = ~c
, я становлюсь ближе к ожидаемому поведению, но мне нужна согласованная цветовая схема.
Что я пробовал
Я пытался вручную указать цвета, но затем некоторые из связанные разрывы выбора. Я попытался создать отдельный сводный набор данных из объекта sharedData
, а затем построить это, но опять же это нарушает связь между графиками.
Если у кого-нибудь есть какие-либо подсказки относительно того, как решить эту проблему, я был бы очень благодарен.