【发布时间】:2021-05-02 20:58:35
【问题描述】:
我正在开发一个闪亮的应用程序,它“理论上”将允许用户以交互方式选择使用plotly::ggplotly 制作的图表中显示的值的悬停文本。到目前为止,我的方法是将列名从我的 selectizeInput 传递到 aes(text = paste0(...)) 以尝试提取列名和对应于图中 (x,y) 点的观察值。
如果我明确调用aes(text = paste0(...)) 中的列,它会很好用。但是,当我尝试使用 selectizeInput 时,我只成功提取了列名,而不是相应的观察结果。
在下面的示例中,我在悬停文本中包含了包含所需输出的有效内容。我还尝试了使用交互式输入复制所需输出的最佳尝试。
据我所知,我认为我的问题是我没有正确地告诉 R 将列名同时用作字符串和列。任何帮助或建议将不胜感激!
# Load Libraries ----
library(tidyverse)
library(shiny)
library(shinydashboard)
# Server ----
server <- function(input, output, session){
# Generate sample values ----
set.seed(12345)
n_points <- 26
x <- sample(1:100, n_points, TRUE)
y <- sample(1:100, n_points, TRUE)
a <- seq(1:n_points)
b <- letters[seq(1:n_points)]
df <- tibble(x, y, a, b)
# Plot_works ----
output$plot_works <- plotly::renderPlotly({
pc <- df %>% ggplot(aes(x = x, y = y)) +
geom_point(aes(text = paste0("a: ", a,"\n", "b: ", b)))
p <- plotly::ggplotly(pc, tooltip = c("x", "y", "text"))
return(p)
})
# Plot_bugged ----
output$plot_bugged <- plotly::renderPlotly({
pc <- df %>% ggplot(aes(x = x, y = y)) +
geom_point(aes(text = ifelse(is.null(input$hovertext), "",
paste0(input$hovertext,": ", !!input$hovertext, collapse = "\n"))))
p <- plotly::ggplotly(pc, tooltip = c("x", "y", "text"))
return(p)
})
}
# Body ----
body <- dashboardBody(
column(width = 6,
h3("This Works"),
plotly::plotlyOutput("plot_works")
),
column(width = 6,
h3("This does not work"),
selectizeInput("hovertext", "Select point hovertext", choices = c("a", "b"), multiple = TRUE),
plotly::plotlyOutput("plot_bugged")
)
)
# UI ----
ui <- dashboardPage(
header = dashboardHeader(disable = TRUE),
sidebar = dashboardSidebar(disable = TRUE),
body = body)
# Run App ----
shinyApp(ui = ui, server = server)
【问题讨论】: