gpt4 book ai didi

r - 在 ggplot2 中不创建新图层的情况下向当前图添加图层

转载 作者:行者123 更新时间:2023-12-01 13:50:19 24 4
gpt4 key购买 nike

在基本 R 中,您可以向现有绘图添加图层,而无需创建新绘图。

df <- data.frame(x = 1:10, y = runif(10))
plot(df, type = "l")
points(df, add = T)

第二行创建一个绘图,第三行向现有绘图添加点。在 ggplot2 中:
my_plot <- ggplot(df, aes(x, y)) + geom_path()
my_plot
my_plot + geom_point()

第二行创建一个图,第三行创建另一个图。我可以以某种方式将点添加到由第二行创建的现有绘图中吗?有没有类似 add=TRUE在 ggplot 中?

我想要这种行为的原因是在 Shiny 的情况下使用 ggplot2 会导致其动画闪烁。

最佳答案

这是一个想法。保持情节为 reactiveValue并让观察者使用用户输入更新绘图。然后,让另一个观察者观察将在绘图数据更改时呈现绘图的绘图数据。这样,长时间的计算发生在绘图数据更改之前,因此绘图的渲染应该发生得如此之快,以至于应该有很少的可见中断。这是使用 diamond 的示例数据集来自 ggplot2它足够大,在渲染路径时显然很慢。

shinyApp(
shinyUI(
fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("x", "X", choices=names(diamonds)),
selectInput("y", "Y", choices=names(diamonds)),
checkboxInput("line", "Add line")
),
mainPanel(
plotOutput("plot")
)
)
)
),
shinyServer(function(input, output, session) {
data(diamonds)
vals <- reactiveValues(pdata=ggplot())

observe({
input$x; input$y; input$line
p <- ggplot(diamonds, aes_string(input$x, input$y)) + geom_point()
if (input$line)
p <- p + geom_line(aes(group=cut))
vals$pdata <- p
})

observeEvent(vals$pdata,{
output$plot <- renderPlot({
isolate(vals$pdata)
})
})
## Compare to this version
## output$plot <- renderPlot({
## vals$pdata
## })
})
)

关于r - 在 ggplot2 中不创建新图层的情况下向当前图添加图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32301813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com