Использование выпадающего меню R plotly для выбора переменной и продолжения использования цветовой переменной в качестве трассы - PullRequest
1 голос
/ 17 апреля 2020

Я добавлял селектор переменных на график в R (следуя обычному подходу, который заключается в сокрытии ненужных следов от графика)

library(plotly)

dat <- mtcars
dat$cyl <- factor(dat$cyl)
dat$car <- rownames(mtcars)

dat %>% 
    plot_ly(x = ~car, y = ~mpg,
            name='mpg', type='scatter', mode='markers') %>%
     add_trace(y = ~hp, name = 'hp', type='scatter', mode='markers') %>%
     add_trace(y = ~qsec, name = 'qsec', type='scatter', mode='markers') %>%
       layout(
          updatemenus = list(
            list(
                type = "list",
                label = 'Category',
                buttons = list(
          list(method = "restyle",
               args = list('visible', c(TRUE, FALSE, FALSE)),
               label = "mpg"),
          list(method = "restyle",
               args = list('visible', c(FALSE, TRUE, FALSE)),
               label = "hp"),
          list(method = "restyle",
               args = list('visible', c(FALSE, FALSE, TRUE)),
               label = "qsec")
        )
      )
    )
  )

enter image description here

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

Стандартное использование переменной цвет / группа будет быть примерно таким

plot_ly(group_by(dat,cyl), x = ~car, y = ~mpg, color = ~cyl, type='scatter', mode='markers')

ПРИМЕЧАНИЕ: я использую group_by(), потому что group = ... устарел.

enter image description here

Возможно добавить выпадающее меню в качестве селектора переменных и все еще иметь возможность использовать переменную цвета / группы для скрытия и отображения данных выбранной переменной?

Я пытался добавить color= ~cyl, но, как вы можете себе представить, это не работает.

Заранее спасибо !!

1 Ответ

1 голос
/ 17 апреля 2020

Попробуй это. Сначала я преобразовал набор данных в длинный формат, чтобы переменные стали категориями одной переменной name со значениями в value. Во-вторых, я отображаю name на символ и cyl на цвет. В третьих. Я настраиваю метки легенды так, чтобы в легенде отображалось только cyl, сопоставляя cyl имя внутри add_trace.

library(plotly)

dat <- mtcars
dat$cyl <- factor(dat$cyl)
dat$car <- rownames(mtcars)

dat %>% 
  tidyr::pivot_longer(c(mpg, hp, qsec)) %>% 
  plot_ly(x = ~car, y = ~value, color = ~cyl, symbol = ~name) %>%
  add_trace(type='scatter', mode='markers', name = ~cyl) %>% 
  layout(
    updatemenus = list(
      list(
        type = "list",
        label = 'Category',
        buttons = list(
          list(method = "restyle",
               args = list('visible', c(TRUE, FALSE, FALSE)),
               label = "hp"),
          list(method = "restyle",
               args = list('visible', c(FALSE, TRUE, FALSE)),
               label = "mpg"),
          list(method = "restyle",
               args = list('visible', c(FALSE, FALSE, TRUE)),
               label = "qsec")
        )
      )
    )
  )

enter image description here

...