Я хотел бы изменить форму и размер щелкнутой точки на графике ниже. Как этого достичь? Для этого игрушечного сюжета я уменьшил количество баллов с первоначальных 100 000 до 2 000. Итак, ожидаемое решение должно быть хорошо масштабируемым и не отклоняться от исходного графика, т. е. все цвета до и после обновления точки клика должны быть одинаковыми.
library(shiny)
library(plotly)
df <- data.frame(X=runif(2000,0,2), Y=runif(2000,0,20),
Type=c(rep(c('Type1','Type2'),600),
rep(c('Type3','Type4'),400)),
Val=sample(LETTERS,2000,replace=TRUE))
# table(df$Type, df$Val)
ui <- fluidPage(
title = 'Select experiment',
sidebarLayout(
sidebarPanel(
checkboxGroupInput("SelType", "Select Types to plot:",
choices = unique(df$Type),
selected = NA)
),
mainPanel(
plotlyOutput("plot", width = "400px"),
verbatimTextOutput("click")
)
)
)
server <- function(input, output, session) {
output$plot <- renderPlotly({
if(length(input$SelType) != 0){
df <- subset(df, Type %in% input$SelType)
p <- ggplot(df, aes(X, Y, col = as.factor(Val))) +
geom_point()
}else{
p <- ggplot(df, aes(X, Y, col = as.factor(Val))) +
geom_point()
}
ggplotly(p) %>% layout(height = 800, width = 800)
})
output$click <- renderPrint({
d <- event_data("plotly_click")
if (is.null(d)) "Click events appear here (double-click to clear)"
else cat("Selected point associated with value: ", d$Val)
})
}
shinyApp(ui, server)
Здесь был задан связанный с этим вопрос, но такой подход выделения точки цветом не работает (когда количество уровней переменной велико, трудно жестко запрограммировать цвет, который уже может присутствовать на графике).
Types
не выбран и точка щелкнута, точка, по которой щелкнули, увеличивается в размере с тем же цветом. Хотя форма не меняется, она масштабируема и четко отличается от других близлежащих точек. Теперь, когда вы выбираетеType
, в той же области создается новый график. Удивительно, но описанный выше эффект недоступен при щелчке по точке. Я предполагаю, что должна быть небольшая настройка, чтобы исправить это. 01.09.2017if
решает проблему. 01.09.2017