r - R plotly返回地图上选定线的event_data信息
问题描述
我正在尝试使用 event_data 在绘图地图下方的表格中提供额外信息。
我发现了这个:https ://community.plot.ly/t/how-to-return-the-same-event-data-information-for-selected-points-even-after-modifying-the-data/5847 。通过将键列添加到 aes 来使用 ggplot 的一个很好的例子:
ggplot(mtcars, aes(mpg, wt, col = I(col), key = key))
但是,如何将键列添加到 scattergl 绘图映射,以便在 event_data 中弹出键?任何帮助将不胜感激。
R闪亮代码:
library(plotly)
library(shiny)
ui <- fluidPage(
plotlyOutput("plot"),
verbatimTextOutput("event")
)
server <- function(input, output, session) {
#df sample using dput
df <- structure(list(col_group = structure(1:8, .Label = c("1", "2",
"3", "4", "5", "6", "7", "8"), class = "factor"), color = structure(c(4L,
6L, 7L, 8L, 5L, 3L, 2L, 1L), .Label = c("#1A9850", "#66BD63",
"#A6D96A", "#D73027", "#D9EF8B", "#F46D43", "#FDAE61", "#FEE08B"
), class = "factor"), geometry = structure(list(structure(c(4.52343199617246,
4.52324233358547, 4.52267342343957, 4.52224662532908, 4.52210428346744,
4.52200925015845, 4.52192088448668, 4.52180475361204, 4.52172945325391,
4.52168196905882, 4.5215535740952, 4.52095980475523, 4.52076420632298,
4.52062274547478, 51.9453195440486, 51.9453722803981, 51.945526317454,
51.9456480852256, 51.9456928353329, 51.9457296098645, 51.9457705951341,
51.9458530114811, 51.945914910501, 51.9459312169901, 51.9459510896027,
51.9459966849614, 51.9460077291392, 51.9460066867221), .Dim = c(14L,
2L), class = c("XY", "LINESTRING", "sfg")), structure(c(4.4964540696277,
4.49696710232736, 51.9086692611627, 51.9084484303039), .Dim = c(2L,
2L), class = c("XY", "LINESTRING", "sfg")), structure(c(4.13635479859532,
4.13644010080625, 51.975098751212, 51.9751715711302), .Dim = c(2L,
2L), class = c("XY", "LINESTRING", "sfg")), structure(c(4.47801457239531,
4.47834576882542, 51.9300740588744, 51.9304218318716), .Dim = c(2L,
2L), class = c("XY", "LINESTRING", "sfg")), structure(c(4.45974369011875,
4.46029492493512, 4.46033964902157, 51.9290774018138, 51.9284345596986,
51.9283809798498), .Dim = 3:2, class = c("XY", "LINESTRING",
"sfg")), structure(c(4.43886518844695, 4.43891013390463, 4.43910559159559,
4.43913561800293, 51.93455577157, 51.9344932127658, 51.9341891712133,
51.9341444695365), .Dim = c(4L, 2L), class = c("XY", "LINESTRING",
"sfg")), structure(c(4.54844667292407, 4.55002805772657, 51.9658870347267,
51.9661409927825), .Dim = c(2L, 2L), class = c("XY", "LINESTRING",
"sfg")), structure(c(4.47522875290306, 4.47598748813623, 51.9347985281278,
51.9353886781931), .Dim = c(2L, 2L), class = c("XY", "LINESTRING",
"sfg"))), class = c("sfc_LINESTRING", "sfc"), precision = 0, bbox = structure(c(xmin = 4.13635479859532,
ymin = 51.9084484303039, xmax = 4.55002805772657, ymax = 51.9751715711302
), class = "bbox"), crs = structure(list(epsg = 4326L, proj4string = "+proj=longlat +datum=WGS84 +no_defs"), class = "crs"), n_empty = 0L),
key = c("1", "8000", "10000", "12000", "14000", "16000",
"18000", "22000")), row.names = c(1L, 8000L, 10000L, 12000L,
14000L, 16000L, 18000L, 22000L), class = c("sf", "data.frame"
), sf_column = "geometry", agr = structure(c(col_group = NA_integer_,
color = NA_integer_, key = NA_integer_), .Label = c("constant",
"aggregate", "identity"), class = "factor"))
#plotly
output$plot <- renderPlotly({
plot_geo(df, type = "scattergl", mode = "lines",
color = ~col_group, colors = rev(RColorBrewer::brewer.pal(8, name = "RdYlGn"))
)
})
#event_data
output$event <- renderPrint({
d <- event_data("plotly_click")
if (is.null(d)) "Click events appear here (double-click to clear)" else {
df_select <- df %>% tibble::rownames_to_column() %>% filter(col_group==d$curveNumber-7) %>% filter(row_number()==d$pointNumber+1)
browser()
print(df_select)
}
})
}
shinyApp(ui, server)
解决方案
使用 customdata 解决并更新了 plotly 包。也许对其他人有用:
library(plotly)
library(shiny)
ui <- fluidPage(
plotlyOutput("plot"),
verbatimTextOutput("event")
)
server <- function(input, output, session) {
#df sample using dput
df <- structure(list(col_group = structure(1:8, .Label = c("1", "2",
"3", "4", "5", "6", "7", "8"), class = "factor"), color = structure(c(4L,
6L, 7L, 8L, 5L, 3L, 2L, 1L), .Label = c("#1A9850", "#66BD63",
"#A6D96A", "#D73027", "#D9EF8B", "#F46D43", "#FDAE61", "#FEE08B"
), class = "factor"), geometry = structure(list(structure(c(4.52343199617246,
4.52324233358547, 4.52267342343957, 4.52224662532908, 4.52210428346744,
4.52200925015845, 4.52192088448668, 4.52180475361204, 4.52172945325391,
4.52168196905882, 4.5215535740952, 4.52095980475523, 4.52076420632298,
4.52062274547478, 51.9453195440486, 51.9453722803981, 51.945526317454,
51.9456480852256, 51.9456928353329, 51.9457296098645, 51.9457705951341,
51.9458530114811, 51.945914910501, 51.9459312169901, 51.9459510896027,
51.9459966849614, 51.9460077291392, 51.9460066867221), .Dim = c(14L,
2L), class = c("XY", "LINESTRING", "sfg")), structure(c(4.4964540696277,
4.49696710232736, 51.9086692611627, 51.9084484303039), .Dim = c(2L,
2L), class = c("XY", "LINESTRING", "sfg")), structure(c(4.13635479859532,
4.13644010080625, 51.975098751212, 51.9751715711302), .Dim = c(2L,
2L), class = c("XY", "LINESTRING", "sfg")), structure(c(4.47801457239531,
4.47834576882542, 51.9300740588744, 51.9304218318716), .Dim = c(2L,
2L), class = c("XY", "LINESTRING", "sfg")), structure(c(4.45974369011875,
4.46029492493512, 4.46033964902157, 51.9290774018138, 51.9284345596986,
51.9283809798498), .Dim = 3:2, class = c("XY", "LINESTRING",
"sfg")), structure(c(4.43886518844695, 4.43891013390463, 4.43910559159559,
4.43913561800293, 51.93455577157, 51.9344932127658, 51.9341891712133,
51.9341444695365), .Dim = c(4L, 2L), class = c("XY", "LINESTRING",
"sfg")), structure(c(4.54844667292407, 4.55002805772657, 51.9658870347267,
51.9661409927825), .Dim = c(2L, 2L), class = c("XY", "LINESTRING",
"sfg")), structure(c(4.47522875290306, 4.47598748813623, 51.9347985281278,
51.9353886781931), .Dim = c(2L, 2L), class = c("XY", "LINESTRING",
"sfg"))), class = c("sfc_LINESTRING", "sfc"), precision = 0, bbox = structure(c(xmin = 4.13635479859532,
ymin = 51.9084484303039, xmax = 4.55002805772657, ymax = 51.9751715711302
), class = "bbox"), crs = structure(list(epsg = 4326L, proj4string = "+proj=longlat +datum=WGS84 +no_defs"), class = "crs"), n_empty = 0L),
key = c("1", "8000", "10000", "12000", "14000", "16000",
"18000", "22000")), row.names = c(1L, 8000L, 10000L, 12000L,
14000L, 16000L, 18000L, 22000L), class = c("sf", "data.frame"
), sf_column = "geometry", agr = structure(c(col_group = NA_integer_,
color = NA_integer_, key = NA_integer_), .Label = c("constant",
"aggregate", "identity"), class = "factor"))
#plotly
output$plot <- renderPlotly({
plot_geo(df, type = "scattergl", mode = "lines",
customdata = ~key,
color = ~col_group, colors = rev(RColorBrewer::brewer.pal(8, name = "RdYlGn"))
)
})
#event_data
output$event <- renderPrint({
d <- event_data("plotly_click")
if (is.null(d)) "Click events appear here (double-click to clear)" else {
df_select <- df[df$key %in% d$customdata,]
print(df_select)
}
})
}
shinyApp(ui, server)
推荐阅读
- python-3.x - 为什么在 ResampleImageFilter 执行期间 SimpleITK 会崩溃?
- python - 在列 Pandas 数据框中提取列表
- javascript - 下划线(_s)修改navigation.js 移动菜单切换按钮
- unity3d - 线渲染器和子弹的射击方向不同
- c# - EF Core 过滤器枚举存储为使用 LIKE 运算符的字符串
- python - 比较两个数据框并保留重叠的行
- sql - PostgreSQL中的嵌套行分组
- reactjs - 使用按钮 onClick 执行匿名函数时挂钩调用无效
- c - 未定义对 log10 的引用?
- java - 如何从 ArrayList 中删除索引并打印已删除索引的总整数?