r - plotly crosstalk 过滤器过滤错误,从变量中泄漏其他类别的值

标签 r plotly r-plotly crosstalk

当对分类变量使用 filter_select 时,串扰没有正确过滤,从其他类别中获取值。

可重现的例子:


df <- structure(list(weight = c(0.349, 0.336, 0.329, 0.331, 0.329, 
 0.329, 0.321, 0.317, 0.317, 0.349, 0.351, 0.353, 0.355, 0.355, 
 0.355, 0.355, 0.356, 0.356, 0.358, 0.356, 0.356), value = c("housewife", 
    "Merchant", "Unknown", "Technologist", 
   "Admin", "Student", "Social worker", "Unemployed", 
   "Consultant", "Home", "Food", 
  "Engineering", "Real Estate", "Tourism", "Repairment", "Transport", 
   "Navy", "Military", "Security", "Distribution", "Restaurant"
 ), variable = c("work", "work", "work", 
                 "work", "work", "work", "work", "work", 
                  "work", "sector", "sector", "sector", "sector", 
                  "sector", "sector", "sector", "sector", "sector", 
                   "sector", "sector", "sector")), class = "data.frame",
          row.names = c(NA,-21L))

>  df
   weight         value variable
1   0.349     housewife     work
2   0.336      Merchant     work
3   0.329       Unknown     work
4   0.331  Technologist     work
5   0.329         Admin     work
6   0.329       Student     work
7   0.321 Social worker     work
8   0.317    Unemployed     work
9   0.317    Consultant     work
10  0.349          Home   sector
11  0.351          Food   sector
12  0.353   Engineering   sector
13  0.355   Real Estate   sector
14  0.355       Tourism   sector
15  0.355    Repairment   sector
16  0.355     Transport   sector
17  0.356          Navy   sector
18  0.356      Military   sector
19  0.358      Security   sector
20  0.356  Distribution   sector
21  0.356    Restaurant   sector

df <- highlight_key(df)

library(plotly)
library(crosstalk)

widgets <- bscols(
  widths = c(12),
  filter_select("variable", "Choose Variable", df, ~variable)
)
bscols(
  widths = c(2,10), widgets, 
  plotly::plot_ly(df, y = ~ weight, x = ~ value) %>%
    add_lines() %>%
    layout(xaxis = list(nticks = 10,
                        tickformat = ".2f")
           , showlegend = F)  )

我得到以下错误输出:

enter image description here

最佳答案

您需要使用 categoryarraycategoryorder 定义 x 轴上的类别。在您的示例中,您可能会将 xaxis 误认为是 yaxis

此外,add_lines 将按 value(x 值)的字母顺序连接 weight(y 值)。因此,add_lines 需要替换为 add_pathstype = "scatter", mode = "lines"

代码

df <- highlight_key(df)

widgets <- bscols(
  widths = c(12),
  filter_select("variable", "Choose Variable", df, ~variable)
)

bscols(
  widths = c(2,10),
  widgets,
  plotly::plot_ly(df, y = ~ weight, x = ~ value,
                  type = "scatter", mode = "lines") %>%
    layout(xaxis = list(type = 'category',
                        categoryarray =  ~value,
                        categoryorder = "array"),
           yaxis = list(nticks = 10,
                        tickformat = ".2f"),
           showlegend = F))  

地 block enter image description here

关于r - plotly crosstalk 过滤器过滤错误,从变量中泄漏其他类别的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69032533/

相关文章:

r - 有没有办法在 Plotly(特别是 R)中隐藏跟踪名称?

r - 创建一个带有副标题的 ggplotly 对象

r - 有没有办法将本地存储的图像读取到 Plotly 中?

R shiny - Shiny 模块函数中最后单击的按钮 id

r - 基于列名称的部分匹配的子集数据

r - 如何在 wordpress 网站上嵌入图表?

r - 如何使用R的plotly更改条形图中的颜色方案?

regex - 在 R 中查找并替换整个值

R Data.table 根据另一列划分列中的值

python - 如何在 plotly 中为 ticktext 着色?