2015-04-17 11 views
6

C'è un modo per usare diversi tipi di grafici con i dygraph in R come sul sito web dei dygraphs stesso http://dygraphs.com/tests/plotters.html? C'è un modo per accedere a questi quando si utilizza R? Un semplice esempio tratto dal sito Web di dygraphs per R potrebbe essere:Creare un plotter in R usando il pacchetto dygraphs

library(dygraphs) 
library(dplyr) 
lungDeaths <- cbind(mdeaths, fdeaths) 
dygraph(lungDeaths) 
# How to choose a different type of plot? 

/edit. Così ho scoperto che puoi usare plotter personalizzati con dygraph come qui: http://blog.dygraphs.com/2012/08/introducing-custom-plotters.html. C'è un modo per farlo in R?

+0

provare il pacchetto 'ggplot2'. –

+0

Conosco ggplot2 ma voglio usarlo in modo interattivo in un file html. Anche la funzione di sincronizzazione è molto attraente per me! Voglio avere un selettore Range fornito da dygraph come questo: http://rstudio.github.io/dygraphs/gallery-range-selector.html – pfuhlert

risposta

6

Ho utilizzato il plotter in dyOptions per creare un grafico a barre. Ho appena copiato la funzione barChartPlotter dal blog di Dygraphs. http://blog.dygraphs.com/2012/08/introducing-custom-plotters.html

library(xts) 
library(dygraphs) 
library(lubridate) 

graph_data <- xts(x = c(1,2,3,4), order.by = lubridate::ymd(c("2015-01-01", "2015-02-01", "2015-03-01", "2015-04-01"))) 
names(graph_data) <- "value" 

dygraph(graph_data) %>% 
    dyOptions(useDataTimezone = TRUE, plotter = 
       "function barChartPlotter(e) { 
       var ctx = e.drawingContext; 
       var points = e.points; 
       var y_bottom = e.dygraph.toDomYCoord(0); // see  http://dygraphs.com/jsdoc/symbols/Dygraph.html#toDomYCoord 

       // This should really be based on the minimum gap 
       var bar_width = 2/3 * (points[1].canvasx - points[0].canvasx); 
       ctx.fillStyle = e.color; 

       // Do the actual plotting. 
       for (var i = 0; i < points.length; i++) { 
        var p = points[i]; 
        var center_x = p.canvasx; // center of the bar 

        ctx.fillRect(center_x - bar_width/2, p.canvasy, 
           bar_width, y_bottom - p.canvasy); 
        ctx.strokeRect(center_x - bar_width/2, p.canvasy, 
           bar_width, y_bottom - p.canvasy); 
       } 
       }") 
+0

Wow molto bello! Grazie. Ho messo a magazzino con NVD3, ma questa è la risposta perfetta alla mia domanda. – pfuhlert

+0

Ho avuto lo stesso problema lo scorso lunedì e ho pensato che qualcun altro potesse trovarlo utile. NVD3 è molto bello! – KERO

2

Provare il rCharts e NVD3. Non è possibile ingrandire i grafici, ma IMO è più elegante e alcune funzioni di selezione sono interessanti.

+0

OK Ho finito per usare NVD3 quindi grazie per la risposta. Lo sceglierò come soluzione. – pfuhlert