2015-02-15 7 views
5

Ich kann sehen, wie ggvis, rCharts usw. in eine server.r + ui.r Konstruktion passt. Ich versuche nun, eine HTML-Benutzeroberfläche zu erstellen, bin aber nicht in der Lage, Hinweise zur Weitergabe eines interaktiven Diagramms an eine HTML-Benutzeroberfläche zu finden. Irgendwelche Hinweise?Hinzufügen von Interactive Chart zu Shiny mit HTML UI (index.html)

Untersucht für ggvis, rCharts, NBD3. Nicht für Plot untersucht. Vermeiden von googleVis.

Eine ähnliche Frage wurde vor gefragt worden, von einem Evan Farrell, aber ohne Antwort - https://groups.google.com/forum/#!topic/ggvis/GsZQRl3VOZ4

Edit: diese benutzerdefinierte Bindung benötigen Sie? Irgendwelche einfacheren Alternativen? Ich dachte, die Ausgabe wäre Javascript erzeugt SVG, so ist es nicht möglich für die Bibliotheken manuell enthalten sein und die SVG nur an ein div-Element gebunden?

Edit 2: Kann ich meine Daten-Set an die UI passieren irgendwie und bauen sagen ein Diagramm D3 in index.html selbst

+0

Es gibt viele Beispiele, die Sie durch eine einfache Google-Suche finden können. Für einen Anfang gehen Sie zum Ende dieser Seite: "http://ggvis.studio.com/interactivity.html" mit einem grundlegenden ggvis/glänzenden Beispiel. – hvollmeier

+0

Danke @hvollmeier, Ich habe Probleme damit, den ui.r-Teil in etwas umzuwandeln, das mit einer HTML-Benutzeroberfläche funktioniert. Haben Sie irgendwelche Hinweise darauf? – TheComeOnMan

+1

Sie sollten keine ui.r-Datei haben, wenn Sie mit einem html-ui arbeiten. Sie legen im Grunde genommen eine index.html-Datei an, die die Datei "ui.r" in das Verzeichnis "www" (das ein Unterverzeichnis Ihres Projektverzeichnisses ist) ersetzt. Sehen Sie sich diesen Link an http://shiny.rstudio.com/articles/html-ui.html – hvollmeier

Antwort

5

Sie here Beispiele finden, wie dem mit ggvis glänzend ist:

library(shiny) 
library(ggvis) 

runApp(list(

    ui={ 
    library(ggvis) 
    shinyUI(pageWithSidebar(
     div(), 
     sidebarPanel(
     sliderInput("n", "Number of points", min = 1, max = nrow(mtcars), 
        value = 10, step = 1), 
     uiOutput("plot_ui") 
    ), 
     mainPanel(
     htmlOutput("ggvis_plot"), 
     tableOutput("mtc_table") 
    ) 
    )) 

    }, 

    server={ 
    library(ggvis) 
    shinyServer(function(input, output, session) { 

     output$ggvis_plot <- renderUI({ 
     ggvisOutput("plot1") 
     }) 
     # A reactive subset of mtcars 
     mtc <- reactive({ mtcars[1:input$n, ] }) 
     # A simple visualisation. In shiny apps, need to register observers 
     # and tell shiny where to put the controls 
     mtc %>% 
     ggvis(~wt, ~mpg) %>% 
     layer_points() %>% 
     bind_shiny("plot1") 
     output$mtc_table <- renderTable({ 
     mtc()[, c("wt", "mpg")] 
     }) 
    }) 
    } 
)) 

um es zu einem hTML-UI zu konvertieren, glänzend Projekt müssen Sie ein Verzeichnis mit der folgenden Struktur zu schaffen (wie here beschrieben, wie hvollmeier zeigt):

<shinnyappName> 
|-- www 
    |-- index.html 
|-- server.R 

Der Server Teil bleibt gleich. Für unser Beispiel wäre die index.html Teil etwas wie:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <script type="application/shiny-singletons"></script> 
    <script type="application/html-dependencies">json2[2014.02.04];jquery[1.11.0];shiny[0.11.1];ionrangeslider[2.0.2];bootstrap[3.3.1]</script> 
<script src="shared/json2-min.js"></script> 
<script src="shared/jquery.min.js"></script> 
<link href="shared/shiny.css" rel="stylesheet" /> 
<script src="shared/shiny.min.js"></script> 
<link href="shared/ionrangeslider/css/normalize.css" rel="stylesheet" /> 
<link href="shared/ionrangeslider/css/ion.rangeSlider.css" rel="stylesheet" /> 
<link href="shared/ionrangeslider/css/ion.rangeSlider.skinShiny.css" rel="stylesheet" /> 
<script src="shared/ionrangeslider/js/ion.rangeSlider.min.js"></script> 
<meta name="viewport" content="width=device-width, initial-scale=1" /> 
<link href="shared/bootstrap/css/bootstrap.min.css" rel="stylesheet" /> 
<script src="shared/bootstrap/js/bootstrap.min.js"></script> 
<script src="shared/bootstrap/shim/html5shiv.min.js"></script> 
<script src="shared/bootstrap/shim/respond.min.js"></script> 

</head> 
<body> 
    <div class="container-fluid"> 
    <div class="row"> 
     <div></div> 
    </div> 
    <div class="row"> 
     <div class="col-sm-4"> 
     <form class="well"> 
      <div class="form-group shiny-input-container"> 
      <label class="control-label" for="n">Number of points</label> 
      <input class="js-range-slider" id="n" data-min="1" data-max="32" data-from="10" data-step="1" data-grid="true" data-grid-num="7.75" data-grid-snap="false" data-prettify-separator="," data-keyboard="true" data-keyboard-step="3.2258064516129"/> 
      </div> 
      <div id="plot_ui" class="shiny-html-output"></div> 
     </form> 
     </div> 
     <div class="col-sm-8"> 
     <div id="ggvis_plot" class="shiny-html-output"></div> 
     <div id="mtc_table" class="shiny-html-output"></div> 
     </div> 
    </div> 
    </div> 
</body> 
</html> 

Welche Sie schreiben sollte oder Sie könnten, wenn Sie die HTML-Seite durch die shinyUI als index.html und ändern Sie es auf Ihre Bedürfnisse als auch erzeugt sparen als etwas extra und unerwünscht entfernen.

library(shiny) 
runApp("<shinyAppName>") 
+0

Danke @Stanislav.Ich kann die Tabelle korrekt anzeigen, aber es gibt kein Streudiagramm. Das div 'plot-gear-icon' ist gefüllt, aber das div' plot' ist leer. Sehen Sie das gleiche Ergebnis, wenn Sie es ausführen? – TheComeOnMan

+0

Ja, aber als ich es auf einem anderen Computer ausprobierte, musste ich zuerst das ganze Beispiel mit der ui.R ausführen, wahrscheinlich um alle includes zu generieren. – Stanislav

+0

Mit includes meinst du die Skripte und CSS, die bezogen werden (ich bin neu dazu :))? Das Ausführen von UI ist für mich keine Option, da ich diese App auch mit anderen teilen muss. – TheComeOnMan

0

Sie können Shiny verwenden, ggplot2 und Plotly interaktive Plots webbasiertes zu erzeugen. Plots werden mit D3.js gerendert und können embedded in HTML sein.

Im Allgemeinen bedeutet dies, dass Sie zwei Optionen haben. Erstellen Sie zunächst eine Shiny-App mit interaktiven Grafiken und betten Sie die gesamte App ein. Zweitens, generieren Sie interaktive Grafiken aus einer Shiny App oder using ggplot2 und betten Sie diese Figur ein.

Code und eine Erklärung zum Erstellen interaktiver Grahps mit Shiny finden Sie unter this tutorial. Dieser Ansatz ermöglicht es Ihnen, interaktive grafische Darstellungen wie diese zu machen:



enter image description here

Verwandte Themen