在使用Shiny创建的应用程序中,我具有一个将平均数据叠加到绘图上的功能。允许用户选择折线图或散点图,尽管当用户尝试将平均数据叠加到散点图上时,绘制图形本身会花费更长的时间。
叠加数据与散点图和折线图以相同的方式合并到原始数据的数据帧中,因此我猜测它与图形本身有关。
我不确定是否有办法使它更好,否则我将只处理它,我猜想它要花更多的cpu来覆盖图形上的点而不是一条线,这就是为什么更长。
下面,我提供了我所指的完整示例。
library(dplyr)
library(data.table)
library(shiny)
ui<-
fluidPage(
sidebarLayout(position="left",
sidebarPanel("Parameters",width = 4,
radioButtons("Type","Graph Type", choices= list("Scatter"="p",
"Line"="l")),
actionButton("Plot","Overlay Data")
),
mainPanel(
plotOutput("MainPlot")
)
)
)
server<-function(input,output,session){
#Create Sample Data
A<-seq(1, 100000, by=1)
B<-seq(-40000, 259999, by=1)
#Create Date Seq. for Data set A
Date1<-as.POSIXct("1-1-2018 00:00", format="%m-%d-%Y %H:%M")
Date_A<-seq(Date1, by="15 min", length.out = 100000)
#Create Date Seq. for Data set B
Date3<-as.POSIXct("1-1-2017 00:00", format="%m-%d-%Y %H:%M")
Date_B<-seq(Date3, by="15 min", length.out = 300000)
#Put into Data Frames
df_A<-data.frame(Date_A,A)
names(df_A)<-c("DateTime","Data_A")
df_B<-data.frame(Date_B,B)
names(df_B)<-c("DateTime","Data_B")
#Set Max min
ymax=max(df_A$Data_A)
ymin=min(df_A$Data_A)
#Set as Data Tables
setDT(df_A)
setDT(df_B)
output$MainPlot<-renderPlot(plot(df_A,type=input$Type))
#Base Plot of Just df_A
observeEvent(input$Plot, {
output$MainPlot<-renderPlot({
Final_DF = df_A[df_B, c("Data_A", "Data_B") := .(Data_A, Data_B), on=
("DateTime")]
plot(Final_DF$DateTime,Final_DF$Data_A,type=input$Type,
xaxt="n",ylim=c(ymin,ymax))
par(new=TRUE)
plot(Final_DF$DateTime,Final_DF$Data_B, type=input$Type, axes = FALSE,
xlab="",ylab = "",col="red",ylim=c(ymin,ymax))
axis.POSIXct(1, Final_DF$DateTime, format="%m-%d-%Y
%H:%M", labels = T)
}) # Closes Render Plot
})# Observe Event
} #Closes Server
shinyApp(ui,server)
对不起,代码太长了,大部分代码都在创建格式数据。
谢谢您的任何见解。