我想动态快速地突出显示ggplot中faceted
shiny上的点。
我的问题:图形每次都需要花费很多时间进行重新计算(facet图表经常会出现这种情况)。
观 此刻我只有两个:
ggplot
找到一种“预先计算”的方法,只修改一些红色点。ggplot
仅限于红点(这将更轻)。 参考文献:我发现了以下主题:
但它似乎不适用于我的问题。 请在下面找到可重现的示例。非常感谢您的帮助和支持!
ggplot
版本1:轻松阅读代码,但更新数据时会产生重要的滞后效应
library(shiny); library(ggplot2); library(dplyr)
# Dataset
data_=do.call("rbind", replicate(1000, mtcars, simplify = FALSE))
# General graphic
p_0=ggplot(data=data_,aes(x=wt,y=mpg))+geom_point()+facet_wrap(~carb)
版本2:更好的用户体验,但难以阅读代码,使用绝对面板进行布局困难,仍然存在滞后问题
ui=fluidPage(
fluidRow(
column(width = 12,
numericInput("choice", "Highlight in red when carb=",1,),
plotOutput("plot1"))
)
)
server=function(input, output) {
p=reactive({return(
p_0+geom_point(data=data_ %>% filter(carb==input$choice),aes(x=wt,y=mpg),color='red')
)})
output$plot1=renderPlot({p()})
}
shinyApp(ui, server)
答案 0 :(得分:0)
我认为通过做以下两件事,我在速度上有所改善:
library(shiny); library(ggplot2); library(dplyr)
# Dataset
data_=do.call("rbind", replicate(1000, mtcars, simplify = FALSE))
# General graphic
ui=fluidPage(
fluidRow(
column(width = 12,
selectInput("choice", "Highlight in red when carb=",1, choices = c(1:4,6,8)),
plotOutput("plot1"))
)
)
server=function(input, output) {
cols <- reactive({
cols <- c("1" = "black", "2" = "black", "3" = "black",
"4" = "black", "6" = "black", "8" = "black")
cols[input$choice] <- "red"
return(cols)
})
output$plot1=renderPlot({
ggplot(data_, aes(x=wt, y=mpg, color = as.character(carb))) +
geom_point() +
scale_colour_manual(values = cols()) +
facet_wrap(~carb)
})
}
shinyApp(ui, server)