如何在闪亮的直方图中动态添加和删除覆盖
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
中,您可以使用split
或color
基于此列创建跟踪。
要删除跟踪,您可以从反应数据集中过滤类别并重新渲染绘图:
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 请看我的编辑。以上是关于如何在闪亮的直方图中动态添加和删除覆盖的主要内容,如果未能解决你的问题,请参考以下文章