2017-05-22 2 views
2

Je suis nouveau dans R. maintenant je crée une application brillante. R peut lire mon ensemble de données. avec la commande myData < - read.csv ("myData.csv"). Cependant, le fichier shinyServer ne peut pas lire mes données. et n'énumérez aucune observation. Pourriez-vous les gars m'aider quel est le problème? Le Shinyapp offre une visualisation interactive pour la production de matières premières dans le monde depuis 1900 à 2010 pour tous les 10 ans. Aussi je continue à obtenir cette erreur: "ERROR: 'breaks' ne sont pas uniques"R brillant chorpleth carte

Le code est ici:

shinyUI(fluidPage(

    checkboxInput("type", "Please Select production type:", 
        c("Aluminium", "Gold", 
         "Iron", "Silver", "Zinc") 
), 
    sliderInput("year","Choose a Year", 
       min = 1910, 
       max = 2010, 
       value= 2010), 
    checkboxInput("Economy", "Please Select Economy Factor:", 
        c("Income Inequallity", "labourers Real Wage", "GDP", "Inflation")), 

    plotOutput("thisPlot"), 
    leafletOutput("myMap") 
) 
) 

shinyServer:

myData <- read.csv("myData.csv") 
shinyServer<- function(input,output){ 

    output$myMap <- renderLeaflet({ 
    temp <- which(myData$type == input$type & 
        myData$year == input$year) 
    myData <- myData[temp,] 

    pal <- colorQuantile("YlGn", myData$production, n = 9) 
    country_popup <- paste0("<strong>Estado: </strong>", myData$Country) 

    leaflet(data = myData) %>% 
     setView(46.227638, 2.213749, zoom = 2) %>% 
     addTiles() %>% 
    addPolygons(lng = ~myData$Long, lat = ~myData$Lat, 
       fillColor = ~pal(myData$production), 
        fillOpacity = 0.8, 
        color = "#BDBDC3", 
        weight = 1, 
        popup = country_popup) 


    }) 
} 

les données sont:

Names = c("id", 
"Country", "type", "year", "production", "GDP", "Income", "Inflation", 
"Laborer", "Lat", "Long"), class = "data.frame", row.names = c(NA, 
-10670L)) 
head(myData) 
    id Country type year production GDP Income Inflation Laborer  Lat 
Long 

1 1 Guyana Gold 1910 0.000000 0 42.43048   0 154.45527 4.860416 
    -58.9301 

il semble qu'il lise les données mais il ne le fait pas montre le. et j'ai un problème avec la création de la carte choroplèthe. ce qui ne fonctionne pas maintenant dans mon brillant.

+0

pouvez-vous nous montrer certaines de vos données? c'est-à-dire par 'dput (myData)' ou 'head (myData)' et pouvez-vous insérer une instruction print avant l'appel de la fonction colorQuantile()? 'print (myData)' et dites-nous quelle est la sortie dans la console? – maRtin

+0

Des commentaires à ce sujet? –

+0

data.frame ': \t 10670 obs. de 11 variables: $ id: int 1 2 3 4 5 6 7 8 9 10 ... $ Pays: Facteur w/194 niveaux "Afghanistan", ..: 70 70 70 70 70 70 70 70 70 70 .. $ type: Facteur avec 5 niveaux "Aluminium", "Or", ..: 2 2 2 2 2 2 2 2 2 2 ... $ année: int 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000. .. production $: num 0 7,42 2,09 7,91 6,05 ... $ PIB: $ num revenu: num $ inflation: num $ Labourer: num $ Lat: num $ long: num – Fzd

Répondre

1

Oui, le feuillet est difficile. Je n'ai pas eu à faire beaucoup de changements, vous l'aviez presque. L'un des principaux problèmes était que votre filtre donnait généralement une base de données vide qui faisait que les marqueurs ne s'affichaient pas (bien sûr).

Ce problème de dataframe vide est aussi la cause du message "ERROR: 'breaks' are not unique" depuis colorQuantile est devient une entrée nulle pour son argument domain, ce qui signifie qu'il fait un vide quantile, et toutes les pauses sont nuls et donc « pas unique ». Cela peut également arriver avec des données fortement asymétriques. Vous devriez éviter de l'appeler dans ce cas - peut-être se replier sur colorBin, bien que détecter cela peut être un peu compliqué.

Les modifications suivantes ont été apportées.

  • Ajout de fausses données.
  • Modifié addPolygons à addCircleMarkers comme addPolygons est d'ajouter des formes d'arbitre que vous spécifiez.
  • Vous avez modifié votre checkBoxInput en checkBoxGroupInput car vous ne vouliez pas de case à cocher, vous en vouliez un groupe.
  • Modification de la clause de filtre pour utiliser myData$type %in% input$type au lieu de myData$type == input$type car vous souhaitiez probablement devenir membre.
  • a tronqué la valeur input$year car il ne peut pas renvoyer un entier, mais vos valeurs year sont définitivement des entiers.
  • Vous avez modifié la couleur de la bordure en "black" afin de pouvoir la voir sur le cercle.
  • Notez que le popup ne passe pas en stationnaire, vous devez cliquer sur le cercle.
  • a supprimé le myData sur l'entrée du marqueur comme vous l'avez spécifié lors de l'appel leaflet.
  • a commenté le plotOutput car je ne sais pas ce que vous voulez tracer.

Voici le code - cela devrait vous aider à démarrer:

library(shiny) 
library(leaflet) 

# fake-up some data 
n <- 10000 
countrylist <- c("Guyana","Venezuela","Columbia") 
typelist <- c("Aluminium", "Gold","Iron", "Silver", "Zinc") 
types <- sample(typelist,n,replace=T) 
cntrs <- sample(countrylist,n,replace=T) 
lat <- 2.2 + 50*runif(n) 
long <- -46 + 50*runif(n) 
year <- sample(1910:2010,n,replace=T) 
prd <- 100*runif(n) 


myData <- data.frame(Country=cntrs,type=types,year=year,production=prd,Long=long,Lat=lat) 

u <- shinyUI(fluidPage(

    checkboxGroupInput("type", "Please Select production type:", 
       c("Aluminium", "Gold","Iron", "Silver", "Zinc"), 
       selected=c("Gold","Silver") 
), 
    sliderInput("year","Choose a Year", 
       min = 1910, 
       max = 2010, 
       value= 2010), 
    checkboxGroupInput("Economy", "Please Select Economy Factor:", 
       c("Income Inequallity", "labourers Real Wage", "GDP", "Inflation")), 
# plotOutput("thisPlot"), 
    leafletOutput("myMap") 
) 
) 

s <- function(input,output){ 

    output$myMap <- renderLeaflet({ 
    temp <- which(myData$type %in% input$type & 
        myData$year == trunc(input$year)) 
    print(nrow(myData)) 
    myData <- myData[temp,] 
    print(nrow(myData)) 

    pal <- colorQuantile("YlGn", myData$production, n = 9) 
    country_popup <- paste0("<strong>Estado: </strong>", myData$Country) 

    leaflet(data = myData) %>% 
     setView(-46.227638, 2.213749, zoom = 2) %>% 
     addTiles() %>% 
     addCircleMarkers(lng = ~Long, lat = ~Lat, 
        fillColor = ~pal(myData$production), 
        radius = 6, # pixels 
        fillOpacity = 0.8, 
        color = "black", 
        weight = 1, 
        popup = country_popup) 
    }) 
} 
shinyApp(u,s) 

Et ceci est le résultat: enter image description here

+0

Salut Mike Wise, Merci beaucoup pour votre réponse rapide. Celui-ci fonctionne et est vraiment bon. seulement je dois ajouter une valeur spécifique à chaque pays et le montrer comme une carte de choropleth. Avez-vous une idée de comment cela peut arriver? – Fzd

+0

La donnée est comme: Pays (liste des pays), type (Or, Argent, Zinc, Fer, Aluminium), Valeur de la production (nombre) – Fzd

+0

Nous vous suggérons de marquer correctement celui-ci, de travailler dessus un peu, et quand vous rester coincé poster une autre question. –