2015-12-03 98 views
2

我試圖複製rstudio頁面上提供的這個示例。x軸閃亮的ggplot繪圖限制作爲日期

gallery/plot-interaction-zoom

的問題是,我需要使用日期(as.Date %d/%m/%Y)爲X軸,當情節縮放我得到這個錯誤

無效輸入:date_trans與類的對象工作迄今爲止,只有

library(ggplot2) 
library(scales) 
library (grid) 
library (DT) 
ui <- fluidPage(
fluidRow(
column(width = 12, class = "well", h4("Left plot controls right plot"), 
fluidRow(column(width = 6, plotOutput("plot1", height = 300, 
brush = brushOpts(
id = "plot2_brush", 
esetOnNew = TRUE))) 
, 
column(width = 6,plotOutput("plot2", height = 300, 
click = "plot_click", 
dblclick = dblclickOpts(
id = "plot_dblclick"))) 
, 
fluidRow(column(width = 12, dataTableOutput("selected_rows"))) 
)))) 

Date <- c("01/01/2014","01/01/2014","01/01/2014","01/01/2014") 
Sevdow <- c(10,30,10,50) 
articles<-as.data.frame(cbind(dates, Sevdow)) 
articles$Sevdow<-as.numeric(tt$Sevdow) 
articles$Date<-as.Date(tt$dates, format="%d/%m/%Y") 

server <- function(input, output) { 
ranges2 <- reactiveValues(x = NULL, y = NULL 
output$plot1 <- renderPlot({ 
ggplot(articles, aes(Date, Sevdow)) + 
geom_point() 
}) 

output$plot2 <- renderPlot({ 
ggplot(articles, aes(Date, Sevdow)) + 
geom_point() + 
coord_cartesian(xlim = ranges2$x, ylim = ranges2$y) 
}) 

observe({ 
brush <- input$plot2_brush 
if (!is.null(brush)) { 
ranges2$x <- c(brush$xmin, brush$xmax) 
ranges2$y <- c(brush$ymin, brush$ymax) 

} else { 
ranges2$x <- NULL 
ranges2$y <- NULL 
} 
}) 

output$selected_rows <- renderDataTable({ 
datatable(
nearPoints(articles, input$plot_click, threshold = 10, maxpoints = 1000, 
addDist = FALSE, allRows = FALSE)) 
}) 
} 

shinyApp(ui, server) 

回答

1

你好,你需要range2$x轉換爲Date:

output$plot2 <- renderPlot({ 
    if (!is.null(ranges2$x)) { 
    ranges2$x <- as.Date(ranges2$x, origin = "1970-01-01") 
    } 
    ggplot(articles, aes(Date, Sevdow)) + 
    geom_point() + 
    coord_cartesian(xlim = ranges2$x, ylim = ranges2$y) 
}) 

而對於nearPoints需要articles$Date轉換爲數值:

output$selected_rows <- renderDataTable({ 
    articles$Date <- as.numeric(articles$Date) 
    nearPoints(articles, coordinfo = input$plot_click, xvar = "Date", yvar = "Sevdow", 
      threshold = 10, maxpoints = 1000, 
      addDist = FALSE, allRows = FALSE) 
}) 
+0

@Victorcp。老,感謝您的意見。對此,我真的非常感激。 – Blas