r - 有没有办法在 plotly_click 之后呈现更详细的表格?
问题描述
我的问题很简单,但我似乎找不到解决方案。
鉴于下面的模拟数据框,我希望在单击使用 plot_ly 生成的条形图中的条形后呈现一个表格。
library(shiny)
library(plotly)
library(DT)
data <- data.frame(c(1,2,3,4,5,6,7,8,9,10),
c(74, 100,74,16,16,99,16, 40, 16, 16),
c(1, 10,1,8,6,2,6,4,6,6),
c(0,0,0,112,0,0,0,0,96,16))
colnames(data) <- c("Deliv", "Pr", "Pro", "Disc")
shinyApp(
ui = fluidPage(
plotlyOutput("plot"),
DT::dataTableOutput('tb')),
server = function(input, output) {
output$plot <- renderPlotly({
plot_ly(data,
x = ~Deliv,
y = ~Pr,
type = "bar",
source = "click")})
output$tb <- renderDataTable({
event.data <- event_data("plotly_click", source = "click")
if(is.null(event.data) == T) return("NULL") else event.data
})
}
)
渲染的表格可能给了我我应该期待的东西,但我需要更多信息,就像用于绘制的原始数据框中的其他变量一样。
有任何想法吗?我会非常感激。
附言。我知道这适用于 ggplot,但我对 plotly 很感兴趣。
解决方案
假设 xou 想要输出关于这一点的过滤数据,我可以提供这个解决方案。event.data
给你x
和y
坐标。您可以使用它们来过滤定义x
为Deliv
和y
as的数据点Pr
。
library(shiny)
library(plotly)
library(DT)
data <- data.frame(c(1,2,3,4,5,6,7,8,9,10),
c(74, 100,74,16,16,99,16, 40, 16, 16),
c(1, 10,1,8,6,2,6,4,6,6),
c(0,0,0,112,0,0,0,0,96,16))
colnames(data) <- c("Deliv", "Pr", "Pro", "Disc")
shinyApp(
ui = fluidPage(
plotlyOutput("plot"),
DT::dataTableOutput('tb')),
server = function(input, output) {
output$plot <- renderPlotly({
plot_ly(data,
x = ~Deliv,
y = ~Pr,
type = "bar",
source = "click")})
output$tb <- renderDataTable({
event.data <- event_data("plotly_click", source = "click")
####### SOLUTION HERE
# corrected NULL as NULL Value
if(is.null(event.data) == T) return(NULL)
# Filter result via Data
res <- data[event.data$x==data$Deliv & event.data$y==data$Pr,]
return(res)
######## SOLUTION END
})
}
)
推荐阅读
- javascript - 在 Cookiebot 的自动阻止模式下如何在点击时加载外部脚本(页面加载后)
- r - 如何根据第二个df从一个df中删除值
- javascript - identityServer4 javascript 交叉请求
- python - 对同一键下的字典值求和
- css - React 测试库 (RTL):测试响应式设计
- hive - hive 3.0.0 想要将时间戳转换为带有掩码的字符串
- mysql - 如何更新我的 mysql 表现有记录
- google-drive-api - 如何开始测试我的 Google Drive UI 集成?
- flutter - 颤动:将屏幕旋转到新屏幕而不是以前的屏幕
- psql - 从 PSQL 中的文件运行 sql 脚本并将输出保存到文件