【问题标题】:Interactively select a grouping variable in plotly在 plotly 中以交互方式选择分组变量
【发布时间】:2018-12-18 01:31:11
【问题描述】:

如何在 plotly 中创建具有下拉菜单(或其他内容)的分组条形图,以便查看者可以选择分组变量?

工作示例:

library(dplyr)
library(plotly)
library(reshape2)

iris$Sepal.L <- iris$Sepal.Length %>%
  cut(breaks = c(4,5,7,8),
      labels = c("Length.a","Length.b","Length.c"))
iris$Sepal.W <- iris$Sepal.Width %>%
  cut(breaks = c(1,3,5),
      labels = c("Width.a","Width.b"))

# Get percentages
data1 <- table(iris$Species, iris$Sepal.L) %>% 
  prop.table(margin = 1)
data2 <- table(iris$Species, iris$Sepal.W) %>% 
  prop.table(margin = 1)

# Convert to df
data1 <- data.frame(Var1=row.names(data1), cbind(data1))
row.names(data1) <- NULL
data2 <- data.frame(Var1=row.names(data2), cbind(data2))
row.names(data2) <- NULL

plot_ly(
  data = data1,
  name = "Length.a",
  x = ~Var1, y = ~Length.a,
  type = "bar") %>% 
  add_trace(y=~Length.b, name = "Length.b") %>% 
  add_trace(y=~Length.c, name = "Length.c")
plot_ly(
  data = data2,
  name = "Width.a",
  x = ~Var1, y = ~Width.a,
  type = "bar") %>% 
  add_trace(y=~Width.b, name = "Width.b")

例如,如果我想在查看带有 table(iris$Species, iris$Sepal.Length) 的绘图和使用 table(iris$Species, iris$Sepal.Width) 的绘图之间进行选择

奖金:
如果这很容易;能够以交互方式选择 x 变量也很酷,但不是必需的。

【问题讨论】:

  • 顺便说一句,我想在没有 Shiny 的情况下完成这个。

标签: r plotly


【解决方案1】:

您可以找到解决方案here。 这个想法是将你的条形图(data1data2)绘制在一起,并且一次只显示一个。

items <- list(
           list(label="Var1", 
                args=list(list(visible=c(T,T,T,F,F)))),          
           list(label="Var2", 
                args=list(list(visible=c(F,F,F,T,T))))
         )

plot_ly(data=data1) %>%
  add_bars(name = "Length.a",
  x = ~Var1, y = ~Length.a, visible=T) %>%
  add_bars(name = "Length.b",
  x = ~Var1, y = ~Length.b, visible=T) %>%
  add_bars(name = "Length.c",
  x = ~Var1, y = ~Length.c, visible=T) %>%
  add_bars(name = "Width.a",
  x = ~Var1, y = ~Width.a, visible=F, data=data2, marker=list(color="#377EB8")) %>%
  add_bars(name = "Width.b",
  x = ~Var1, y = ~Width.b, visible=F, data=data2, marker=list(color="#FF7F00")) %>%
  layout(
    title = "Bar chart with drop down menu",
    xaxis = list(title="x"),
    yaxis = list(title = "y"),
    showlegend = T,
    updatemenus = list(
      list(y = 0.9,
           buttons = items)
    ))

【讨论】:

  • 感谢您的回答。我的问题有点不清楚。改写:我可以选择哪个变量是“填充变量”吗?我编辑了问题。
  • @HelgiGuðmundsson 你好。我修改了我的答案。请让我知道它是否是您正在寻找的东西。
  • 啊,太棒了!太感谢了。这正是我一直在寻找的。我现在看到你在上一个答案中的目的。这非常有效,感谢您的详细说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 2021-01-04
  • 2012-02-28
  • 1970-01-01
相关资源
最近更新 更多