带有闪亮的ggplot中的POSIXct轴和sliderInput

POSIXct axis and sliderInput in ggplot with shiny

我是 Shiny 的新手。我正在尝试将 sliderInput 用于带有 ggplot 和 shiny 的日期。我可以使用 dygraphs 并且它起作用了。但我希望坚持使用 ggplot 进行数据可视化。下面的 R 脚本可能是一团糟。我只是无法使用 ggplot 让 sliderInput 在闪亮的应用程序上工作。

数据集为here.

library(shiny)
library(scales)
library(ggplot2)
library(reshape2)


# Set system language as Japanese
Sys.setlocale(category = "LC_ALL", locale = "Japanese")

# Load data ---- the dataset is available at the link above.
df <-read.csv("data.csv", encoding="UTF-8", stringsAsFactors=FALSE, check.names = F)
colnames(df)[1]<-"取引オープン日"  ##If the first column had extra string.


##Formating date
df$取引クローズ日edit<-gsub("/","-",df$取引クローズ日)
df$取引クローズ日edit<-as.POSIXct(df$取引クローズ日edit, format="%m-%d-%Y %H:%M")

##Pick 5 columns
df_5col<-df[,c("ロット","総ピップス","総収益","ドローダウン(差額)","取引クローズ日edit")]

##Stack dataset
stacked<-melt(df_5col,id.vars="取引クローズ日edit",variable.name="USD/pips",value.name="USD/pips(値)")

stacked$取引クローズ日edit<-as.POSIXct(stacked$取引クローズ日edit, format="%Y-%m-%d %H:%M") ##%m-%d-%Y    

# User interface ----
ui <- fluidPage(
  titlePanel("Autobot1"),
  sidebarLayout(
    sidebarPanel(
      helpText("FX autobot"),
      
      checkboxGroupInput("checkGroup", label = "Choose a variable to display", 
                         choices = c("総収益" = "総収益", "ドローダウン(差額)" = "ドローダウン", "総ピップス" = "総ピップス", "ロット" = "ロット"),
                         selected = "総収益"),
      
      sliderInput("sliderdate", 
                  label = "可視化する期間:",
                  min = as.POSIXct("2020-03-24 10:23", "%Y-%m-%d %H:%M"),
                  max = as.POSIXct("2020-12-30 10:23", "%Y-%m-%d %H:%M"),
                  value=c(as.POSIXct("2020-03-24 10:23"),
                          as.POSIXct("2020-12-30 10:23")),
                  timeFormat="%Y-%m-%d %H:%M")
    ),
    mainPanel(plotOutput("plot1"))
  )
)

# Server logic
server <- function(input, output) {
  output$plot1 <- renderPlot({
    ##filter data
    df_5col%>% 
      filter(取引クローズ日edit == input$sliderdate) %>%
      #data manipulation
      data1=reactive({
        return(stacked[stacked$USD/pips%in%input$checkGroup,])
      })
    ggplot(data=data1) +geom_line(aes(x=取引クローズ日edit, y= 総収益, colour="総収益"))+geom_line(aes(x=取引クローズ日edit, y=総ピップス, colour="総ピップス"))+geom_line(aes(x=取引クローズ日edit, y= ロット, colour="ロット"))+scale_x_datetime(labels = date_format("%Y-%m-%d %H:%M"),date_breaks = "2 months")
  })
  
}

# Run the app
shinyApp(ui, server)

提前致谢

解决了。下面的脚本有效。

library(shiny)
library(scales)
library(ggplot2)
library(reshape2)

# Set system language as Japanese
Sys.setlocale(category = "LC_ALL", locale = "Japanese")

# Load data ----
df <-read.csv("data.csv", encoding="UTF-8", stringsAsFactors=FALSE, check.names = F)
colnames(df)[1]<-"取引オープン日"  ##If the first column had extra string.

##Formating date
df$取引クローズ日edit<-gsub("/","-",df$取引クローズ日)
df$取引クローズ日edit<-as.POSIXct(df$取引クローズ日edit, format="%m-%d-%Y %H:%M") 

##Pick 5 columns
df_5col<-df[,c("ロット","総ピップス","総収益","ドローダウン(差額)","取引クローズ日edit")]

##Stack dataset
stacked<-melt(df_5col,id.vars="取引クローズ日edit",variable.name="USD/pips",value.name="USD/pips(値)")

stacked$取引クローズ日edit<-as.POSIXct(stacked$取引クローズ日edit, format="%m-%d-%Y %H:%M") 


# User interface ----
ui <- fluidPage(
  titlePanel("title"),
  sidebarLayout(
    sidebarPanel(
      helpText("Times-series data of FX autobot"),
      
      checkboxGroupInput("checkGroup", label = "Choose a variable to display", 
                         choices = c("総収益" = "総収益", "ドローダウン(差額)" = "ドローダウン(差額)", "総ピップス" = "総ピップス", "ロット" = "ロット"),
                         selected = "総収益"),
      
      sliderInput("sliderdate", 
                  label = "可視化する期間:",
                  min = as.POSIXct("2020-03-24 10:23"),
                  max = as.POSIXct(Sys.Date()),
                  value=c(as.POSIXct("2020-03-24 10:23"),
                          as.POSIXct("2020-12-30 10:23")),
                  timeFormat="%m-%d-%Y %H:%M")
    ),
    mainPanel(plotOutput("plot1"))
  )
)

# Server logic
server <- function(input, output) {
  output$plot1 <- renderPlot({
    
    ##create the data
    date1<-as.POSIXct(input$sliderdate, timeFormat="%m-%d-%Y %H:%M")
    
    sub_data <- subset(stacked, 取引クローズ日edit >= date1[1] & 取引クローズ日edit <= date1[2])
 
    sub_data2<-sub_data[sub_data[,2]%in%input$checkGroup,]
    ggplot(data=sub_data2) +geom_line(aes(x=取引クローズ日edit, y= sub_data2[,3], color=sub_data2[,2]))+ylab("USD/pips")+xlab("取引クローズ日")+scale_x_datetime(labels = date_format("%m-%d-%Y"),date_breaks = "1 month")
  })
  
}

# Run the app
shinyApp(ui, server)