R Полностью связанный участок с процентной гистограммой и цветными категориями - PullRequest
0 голосов
/ 13 марта 2020

Фон

Я использую 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") 

Вот снимок экрана этого, чтобы проиллюстрировать проблему. enter image description here

Отклонение

Кстати, когда я устанавливаю histnorm = "" в add_histogram(), тогда я приближаюсь к ожидаемому поведению, но мне нужны проценты, а не подсчеты , Когда я удаляю color = ~c, я становлюсь ближе к ожидаемому поведению, но мне нужна согласованная цветовая схема.

Что я пробовал

Я пытался вручную указать цвета, но затем некоторые из связанные разрывы выбора. Я попытался создать отдельный сводный набор данных из объекта sharedData, а затем построить это, но опять же это нарушает связь между графиками.

Если у кого-нибудь есть какие-либо подсказки относительно того, как решить эту проблему, я был бы очень благодарен.

1 Ответ

1 голос
/ 13 марта 2020

Мне кажется, что поведение, которое вы ищете, не реализовано в заговоре.

См. schema(): объект ► следы ► гистограмма ► атрибуты ► гистограмма ► описание

Однако, вот самое близкое, что мне удалось достичь с помощью add_bars и обработки данных (извините для добавления data.table вы сможете сделать то же самое в базе R, только личные предпочтения):

library(plotly)
library(data.table)

n = 1000
make_axis = function(n) c(rnorm(n, -1, 1), rnorm(n, 2, 0.25))
DT = data.table(
  x = make_axis(n),
  y = make_axis(n),
  c = rep(c("A", "B"), each = n)
)

DT[, grp_percent := rep(100/.N, .N), by = "c"]

shared_data = DT %>% 
  highlight_key()

baseplot = plot_ly(shared_data)
# Make the individual panels.

points = baseplot %>% 
  add_markers(x = ~x, y = ~y, color = ~c)

bars = baseplot %>% 
  add_bars(x = ~c, y = ~grp_percent, color = ~c, showlegend = FALSE) %>% 
  layout(barmode = "group")

subplot(points, bars) %>% 
  layout(dragmode = "select") %>% 
  highlight("plotly_selected")

Result

К сожалению, результирующая hoverinfo не очень желательна.

...