如何在闪亮的直方图中动态添加和删除覆盖

Posted

技术标签:

【中文标题】如何在闪亮的直方图中动态添加和删除覆盖【英文标题】:How to dynamically add AND remove overlay from plotly histogram in shiny 【发布时间】:2021-11-28 18:05:11 【问题描述】:

此 R 代码生成一个将两个直方图叠加在一起的绘图。

fig <- plot_ly(alpha = 0.6)
fig <- fig %>% add_histogram(x = ~rnorm(500))
fig <- fig %>% add_histogram(x = ~rnorm(500) + 1)
fig <- fig %>% layout(barmode = "overlay")

fig

我有一个包含变量分类输入的 shiny 应用程序。根据用户的选择,我想添加或删除要在直方图中绘制的类别。能够动态添加或删除叠加层会很棒。现在似乎可以动态添加叠加层。删除它们似乎更困难。我想知道我的要求是否可行?

【问题讨论】:

【参考方案1】:

编辑: @FreyGeospatial 澄清说,他想添加/删除痕迹(我对使用 overlay 的措辞感到困惑)。

动态添加和删除跟踪的最简单方法是创建一个长格式的 data.frame,提供一个类别列。

plot_ly 中,您可以使用splitcolor 基于此列创建跟踪。 要删除跟踪,您可以从反应数据集中过滤类别并重新渲染绘图:

library(shiny)
library(plotly)

DF <- data.frame(values = rnorm(2500), category = rep(LETTERS[1:5], each = 500))

ui <- fluidPage(
  selectizeInput(inputId = "barmode",
                 label = "barmode",
                 choices = c("group", "overlay", "stack"),
                 selected = "overlay"),
  selectizeInput(inputId = "category",
                 label = "category",
                 choices = unique(DF$category), selected = LETTERS[1:3], multiple = TRUE),
  plotlyOutput("myPlot")
)

server <- function(input, output, session) 
  
  filteredDF <- reactive(
    DF[DF$category %in% input$category,]
  )
  
  output$myPlot <- renderPlotly(
    fig <- plot_ly(data = filteredDF(), x = ~ values, split = ~ category, alpha = 0.6, type = "histogram")
    fig <- fig %>% layout(barmode = input$barmode)
    fig
  )
  


shinyApp(ui, server)

作为重新渲染绘图的替代方法,您可以使用 plotlyProxy 和 addTraces JS function,请参阅我的回答 here。这比使用 plotly 的 R API 重新渲染更快,但不太直观。


请运行:

install.packages("listviewer")
schema()

并导航: object ► traces ► bar ► layoutAttributes ► barmode

要查找 barmode 说明:

默认:组

确定如何在同一位置坐标上显示条形图 图表。使用 stack,条形图彼此堆叠 使用 relative,条形图相互堆叠, 轴下方的负值,带有 group 的上方的正值, 条形图彼此相邻,以共享为中心 地点。使用 overlay,条形图相互重叠,您 可能需要不透明度才能看到多个条形图。

【讨论】:

嗨-这是有用的代码,但也许我应该改写一下-我正在寻找从图中添加和删除类别,如动态添加和删除trace0和trace1 请看我的编辑。

以上是关于如何在闪亮的直方图中动态添加和删除覆盖的主要内容,如果未能解决你的问题,请参考以下文章

通过闪亮的按钮动态添加/删除输入字段并保留值

在闪亮上动态添加情节痕迹

使用闪亮动态地将绘图添加到网页

C#中DataTable动态添加行和删除行的问题?

如何从 Shiny 中的下拉框中根据变量选择动态创建直方图

在闪亮的应用程序中缓存基本 ggplot 并允许动态修改图层(leafletProxy 等效于 ggplot)