Добавьте джиттер в коробчатую диаграмму, используя маркеры в plotly

Я сделал коробчатую диаграмму:

dat %>%
  plot_ly(y = ~xval, color = ~get(col), type = "box", 
          boxpoints = "all", jitter = 0.7,
          pointpos = 0, marker = list(size = 3),
          source = shiny_source, key = shiny_key,
          hoverinfo = 'text', text = txt)

введите здесь описание изображения

но проблема в том, что дрожащие точки не являются интерактивными и не могут быть отмечены отдельно, поэтому мне пришла идея добавить эти точки с помощью add_markers:

dat %>%
  plot_ly(y = ~xval, color = ~get(col), type = "box", 
          boxpoints = FALSE, jitter = 0.7,
          pointpos = 0, marker = list(size = 3),
          source = shiny_source, key = shiny_key,
          hoverinfo = 'col', text = txt
  ) %>%
  add_markers(x = ~get(col), y = ~varval, size = I(6))

введите здесь описание изображения

но теперь точки расположены на прямой линии, и я хотел бы добавить немного дрожания (например, используя пакет beeswarm). Но я не знаю, как получить координаты качественной переменной IC0 по оси X. Любые идеи?


person Taz    schedule 20.10.2017    source источник
comment
Насколько я помню, джиттер добавляется пакетом JS, а не R API.   -  person Maximilian Peters    schedule 20.10.2017


Ответы (1)


Я часто оказываюсь в одном и том же потенциальном случае с plotly и ggplot2 - 3 строки кода, чтобы получить 90% того, что я хочу, и 30 строк кода, чтобы получить эстетику просто правильно.

Одно потенциальное решение / обходной путь: воспользуйтесь парадигмой R «факторы кодируются целыми числами», нанесите все на числовую шкалу, а затем скрывайте свои следы, скрывая метки x и значения x при наведении курсора.

dat <- data.frame(xval = sample(100,1000,replace = TRUE),
                  group = as.factor(sample(c("a","b","c"),1000,replace = TRUE)))

dat %>%
  plot_ly() %>% 
  add_trace(x = ~as.numeric(group),y = ~xval, color = ~group, type = "box", 
            hoverinfo = 'name+y') %>%
  add_markers(x = ~jitter(as.numeric(group)), y = ~xval, color = ~group,
              marker = list(size = 6),
              hoverinfo = "text",
              text = ~paste0("Group: ",group,
                             "<br>xval: ",xval),
              showlegend = FALSE) %>% 
  layout(legend = list(orientation = "h",
                       x =0.5, xanchor = "center",
                       y = 1, yanchor = "bottom"
                       ),
         xaxis = list(title = "Group",
                      showticklabels = FALSE))

Дает следующие

введите описание изображения здесь

person Matt Summersgill    schedule 20.10.2017
comment
Отличное решение. Спасибо! - person Taz; 20.10.2017
comment
Можно ли вообще избавиться от рамки и просто построить точки с дрожанием? - person JulianS; 25.07.2018
comment
Да - просто закомментируйте первый вызов add_trace( ... type = "box" ... ) и измените параметр showlegend в вызове add_markers( ... ) на TRUE - person Matt Summersgill; 25.07.2018