R Plotly禁用图例点击和图例双击
R Plotly Disable Legend Click and Legend Double Click
我想使用 R Plotly 从服务器端禁用图例选择。我们看到 here 可以使用以下 javascript 在 plotly javascript 上实现这一点,
gd.on('plotly_legendclick',function() { return false; })
有没有什么方法可以在 R 中使用 event_register()
或 event_data()
来实现?
我找到了一个使用 CSS 禁用图例的 hacky 解决方案。但是,如果同一 output$gg
有多个不同的绘图,CSS 代码会禁用所有绘图的图例。
代表:
最终目标,点击下面的图例一定不能隐藏任何一个点。
library(shiny)
library(plotly)
library(tidyverse)
ui <- fluidPage(
plotlyOutput("gg"),
verbatimTextOutput("click"),
verbatimTextOutput("doubleclick")
)
server <- function(input, output, session) {
output$gg <- renderPlotly({
p <- ggplot(mtcars, aes(wt, mpg, color = factor(cyl))) +
geom_point() +
facet_wrap(~vs)
ggplotly(p) %>%
event_register("plotly_legendclick") %>%
event_register("plotly_legenddoubleclick")
})
output$click <- renderPrint({
event_data("plotly_legendclick")
})
output$doubleclick <- renderPrint({
event_data("plotly_legenddoubleclick")
})
}
shinyApp(ui,server)
这是 htmlwidgets::onRender
的工作:
library(plotly)
library(htmlwidgets)
x <- c(1:15)
y <- c(1:15)
w <- gl(3,5)
dat <- data.frame(x = x, y = y, w = w)
example <- ggplot(dat, aes(x = x, y = y, color = w)) + geom_line()
ggplotly(example) %>%
onRender("function(el,x){el.on('plotly_legendclick', function(){ return false; })}")
不需要 htmlwidgets::onRender
。我们可以简单地使用 layout()
:
library(plotly)
x <- c(1:15)
y <- c(1:15)
w <- gl(3, 5)
dat <- data.frame(x = x, y = y, w = w)
example <- ggplot(dat, aes(x = x, y = y, color = w)) + geom_line()
ggplotly(example) %>% layout(legend = list(
itemclick = FALSE,
itemdoubleclick = FALSE,
groupclick = FALSE
))
运行 schema()
并导航:
object ► layout ► layoutAttributes ► legend ► itemclick
有关这些参数的更多信息。
我想使用 R Plotly 从服务器端禁用图例选择。我们看到 here 可以使用以下 javascript 在 plotly javascript 上实现这一点,
gd.on('plotly_legendclick',function() { return false; })
有没有什么方法可以在 R 中使用 event_register()
或 event_data()
来实现?
我找到了一个使用 CSS 禁用图例的 hacky 解决方案。但是,如果同一 output$gg
有多个不同的绘图,CSS 代码会禁用所有绘图的图例。
代表:
最终目标,点击下面的图例一定不能隐藏任何一个点。
library(shiny)
library(plotly)
library(tidyverse)
ui <- fluidPage(
plotlyOutput("gg"),
verbatimTextOutput("click"),
verbatimTextOutput("doubleclick")
)
server <- function(input, output, session) {
output$gg <- renderPlotly({
p <- ggplot(mtcars, aes(wt, mpg, color = factor(cyl))) +
geom_point() +
facet_wrap(~vs)
ggplotly(p) %>%
event_register("plotly_legendclick") %>%
event_register("plotly_legenddoubleclick")
})
output$click <- renderPrint({
event_data("plotly_legendclick")
})
output$doubleclick <- renderPrint({
event_data("plotly_legenddoubleclick")
})
}
shinyApp(ui,server)
这是 htmlwidgets::onRender
的工作:
library(plotly)
library(htmlwidgets)
x <- c(1:15)
y <- c(1:15)
w <- gl(3,5)
dat <- data.frame(x = x, y = y, w = w)
example <- ggplot(dat, aes(x = x, y = y, color = w)) + geom_line()
ggplotly(example) %>%
onRender("function(el,x){el.on('plotly_legendclick', function(){ return false; })}")
htmlwidgets::onRender
。我们可以简单地使用 layout()
:
library(plotly)
x <- c(1:15)
y <- c(1:15)
w <- gl(3, 5)
dat <- data.frame(x = x, y = y, w = w)
example <- ggplot(dat, aes(x = x, y = y, color = w)) + geom_line()
ggplotly(example) %>% layout(legend = list(
itemclick = FALSE,
itemdoubleclick = FALSE,
groupclick = FALSE
))
运行 schema()
并导航:
object ► layout ► layoutAttributes ► legend ► itemclick
有关这些参数的更多信息。