使用 R 绘图下拉菜单选择变量并继续使用颜色变量作为跟踪

Jav*_*oNu 2 r plotly r-plotly

我正在 R 中的绘图中添加一个变量选择器(遵循通常的方法,即隐藏图中不必要的痕迹)

\n\n
library(plotly)\n\ndat <- mtcars\ndat$cyl <- factor(dat$cyl)\ndat$car <- rownames(mtcars)\n\ndat %>% \n    plot_ly(x = ~car, y = ~mpg,\n            name=\'mpg\', type=\'scatter\', mode=\'markers\') %>%\n     add_trace(y = ~hp, name = \'hp\', type=\'scatter\', mode=\'markers\') %>%\n     add_trace(y = ~qsec, name = \'qsec\', type=\'scatter\', mode=\'markers\') %>%\n       layout(\n          updatemenus = list(\n            list(\n                type = "list",\n                label = \'Category\',\n                buttons = list(\n          list(method = "restyle",\n               args = list(\'visible\', c(TRUE, FALSE, FALSE)),\n               label = "mpg"),\n          list(method = "restyle",\n               args = list(\'visible\', c(FALSE, TRUE, FALSE)),\n               label = "hp"),\n          list(method = "restyle",\n               args = list(\'visible\', c(FALSE, FALSE, TRUE)),\n               label = "qsec")\n        )\n      )\n    )\n  )\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n

该代码完成了这项工作,但它覆盖了组/颜色变量作为跟踪选择器的标准使用,因为我们已经设置了跟踪。

\n\n

颜色/组变量的标准用法是这样的

\n\n
plot_ly(group_by(dat,cyl), x = ~car, y = ~mpg, color = ~cyl, type=\'scatter\', mode=\'markers\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:我使用它是group_by()因为它group = ...已被弃用。

\n\n

在此输入图像描述

\n\n

是否可以将下拉菜单添加为变量选择器,并且仍然能够使用颜色/组变量来隐藏和显示所选变量的数据?

\n\n

我尝试添加color= ~cyl,但是,正如您可以想象的那样,它不起作用。

\n\n

提前致谢!!

\n

ste*_*fan 5

尝试这个。首先,我将数据集转换为长格式,以便变量成为name值为的一个变量的类别value。其次,我映射name符号和cyl颜色。第三。我调整图例标签,以便仅通过映射内部名称cyl来显示在图例中。 cyladd_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")
        )
      )
    )
  )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述