2013-07-04 14 views
6

मैंने एक चमकदार ऐप बनाया है जो ggmap का उपयोग करके स्थिर मानचित्र वापस लाता है। हालांकि जब मैं पोस्टकोड सीमाओं को ओवरले करना चाहता हूं तो मुझे एक त्रुटि आ रही है जहां ggplot डेटा सेट नहीं ढूंढ सकता है।चमकदार ऐप - ggplot डेटा नहीं मिला

डेटासेट पोटा पोस्टकोड सीमाओं का डेटाफ्रेम है यानी पॉलीगॉन आईडी के साथ लेट्स और लोन्स। मैंने पहले ही environment = environment() जोड़ने का प्रयास किया है लेकिन यह मेरी समस्या का समाधान नहीं करता है। मुझे पता है कि डेटा मौजूद है क्योंकि मैं print(str(poa)) पर कॉल करता हूं जो आर कंसोल को प्रिंट करता है।

क्या कोई मेरे लिए एक काम सुझा सकता है ताकि ggplot poa डेटाफ्रेम तक पहुंच सके? मैं क्षमा चाहता हूं कि यह एक बहुत ही प्रतिलिपि उदाहरण नहीं है।

अद्यतन: ggplot जब मैं इस कोड का उपयोग POA dataframe उपयोग करने में सक्षम है:

print(ggmap(map)) + geom_polygon(data = poa, aes(x = LON, y = LAT, group = order), alpha = .5, colour = "black", fill = NA)) 

लेकिन जब मैं ऐसा मैं, एक नेस्टेड कॉल नक्शे के आधार परत के लिए ggplot को बनाने की जरूरत है ggplot डेटा

यहाँ मेरी server.R कोड है खोजने में असमर्थ है

मैं के रूप में मैं अपने ui.R में एक कार्रवाई बटन है और मैं केवल अद्यतन करने के लिए जब यह क्लिक किया गया है साजिश चाहते हैं अलग उपयोग कर रहा हूँ ।

library(shiny) 
library(ggmap) 
library(RODBC) 

# Define server logic required to summarize and view the selected dataset 
shinyServer(function(input, output) { 

output$searchString <- renderText({ 
    if (input$searchButton == 0) 
     return()   
    isolate({input$searchString}) 
}) 

mapSourceInput <- reactive({ 
    switch(input$mapSource 
      , "google" = "google" 
      , "stamen" = "stamen") 
}) 

mapTypeInput <- reactive({ 
    switch(input$mapType 
      , "terrain" = "terrain" 
      , "satellite" = "satellite" 
      , "roadmap" = "roadmap" 
      , "hybrid" = "hybrid" 
      , "toner" = "toner" 
      , "watercolor" = "watercolor") 
}) 

overlayInput <- reactive({ 
    switch(input$overlay 
      , "postcodes" = "postcodes" 
      , "states" = "states" 
      , "nothing" = "nothing") 
}) 

output$map <- renderPlot({ 
    if (input$searchButton == 0) 
     return() 

    isolate({ 
     if (overlayInput() == "nothing"){ 
      map <- get_map(location = input$searchString, zoom = input$zoom, source = mapSourceInput(), maptype = mapTypeInput()) 
      mapPlot <- ggmap(map) 
      print(mapPlot) 
      #return()    
     } else { 
      if (overlayInput() == "postcodes"){ 
       #postcode boundaries 
       map <- get_map(location = input$searchString, zoom = input$zoom, source = mapSourceInput(), maptype = mapTypeInput()) 
       poa <- structure(list(POAOBS = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L) 
           , COORD_REF = 1:10 
           , COORD_POL = 1:10 
           , POLYGON = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L) 
           , LON = c(144.951431274414, 144.956451416016, 144.95539855957, 144.955993652344, 144.958465576172, 144.956634521484, 144.956817626953, 144.954727172852, 144.957550048828, 144.958831787109) 
           , LAT = c(-37.8131675720215, -37.8117561340332, -37.8094863891602, -37.8058776855469, -37.8061485290527, -37.8021659851074, -37.8010902404785, -37.7994079589844, -37.7997169494629, -37.799861907959) 
           , POA = c("3000", "3000", "3000", "3000", "3000", "3000", "3000", "3000", "3000", "3000")) 
          , .Names = c("POAOBS", "COORD_REF", "COORD_POL", "POLYGON", "LON", "LAT", "POA") 
          , row.names = c(NA, 10L) 
          , class = "data.frame") 

       print(str(poa)) 

       print(ggmap(map, base_layer = ggplot(data = poa, aes(x = LON, y = LAT), environment = environment()), extent = "normal", maprange = FALSE, environment = .GlobalEnv) + 
          geom_polygon(data = poa, aes(x = LON, y = LAT, group = order), alpha = .5, colour = "black", fill = NA) + 
          coord_map(projection = "mercator", 
            xlim = c(attr(map, "bb")$ll.lon, attr(map, "bb")$ur.lon), 
            ylim = c(attr(map, "bb")$ll.lat, attr(map, "bb")$ur.lat))) 

      } else { 
       if(overlayInput() == "states"){ 
        return() 
       }}} 
    }) 
}) 

}) 

संपादित करें: जोड़ा ui.R sessionInfo की

library(shiny) 
# Define UI for dataset viewer application 
shinyUI(pageWithSidebar(

# Application title. 
headerPanel("The New Map App"), 

# Sidebar with controls 
sidebarPanel(  
    textInput("searchString", "Get Map Of", value = "melbourne, australia") 

    , selectInput("mapSource", "Choose a Map Source", choices = c("google", "stamen")) 

    , numericInput("zoom", "Zoom Level", 10) 

    , helpText("Note: An integer from 3 (continent) to 21 (building), default value 10 (city)") 

    , selectInput("mapType", "Choose a Map Type", choices = c("terrain", "satellite", "roadmap", "hybrid", "toner", "watercolor")) 

    , helpText("Note: Options available are 'terrain', 'satellite', 'roadmap', and 'hybrid' (google maps), 'watercolor', and 'toner' (stamen maps)") 

    , radioButtons("overlay", "Overlay Polygon", 
        list("Postcodes" = "postcodes" 
         , "States" = "states" 
         , "Nothing" = "nothing")) 

    , actionButton("searchButton", "Get Map") 
    , tags$style(type='text/css', "button#searchButton { margin-bottom: 9px; }") 
), 

#output panel 
mainPanel(
    h3(textOutput("searchString")) 
    , plotOutput("map") 

) 
)) 

उत्पादन:

R version 3.0.1 (2013-05-16) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_AU.UTF-8  LC_NUMERIC=C    LC_TIME=en_AU.UTF-8   LC_COLLATE=en_AU.UTF-8  LC_MONETARY=en_AU.UTF-8 
[6] LC_MESSAGES=en_AU.UTF-8 LC_PAPER=C     LC_NAME=C      LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] RODBC_1.3-7  ggmap_2.3  ggplot2_0.9.3.1 shiny_0.6.0  

loaded via a namespace (and not attached): 
[1] bitops_1.0-5  caTools_1.14  colorspace_1.2-2 dichromat_2.0-0   digest_0.6.3  grid_3.0.1   
[7] gtable_0.1.2  httpuv_1.0.6.3  labeling_0.1   mapproj_1.2-1   maps_2.3-2   MASS_7.3-26   
[13] munsell_0.4   plyr_1.8   png_0.1-5   proto_0.3-10   RColorBrewer_1.0-5 Rcpp_0.10.4   
[19] reshape2_1.2.2  RgoogleMaps_1.2.0.3 rjson_0.2.12  RJSONIO_1.0-3  scales_0.2.3  stringr_0.6.2  
[25] tools_3.0.1   xtable_1.7-1 
+0

क्या आप अपना ui.R पोस्ट कर सकते हैं? परीक्षण करना आसान बनाता है। – MadScone

+0

निश्चित बात @MadScone ui.R जोड़ा गया, धन्यवाद – user1414259

+0

क्या इससे मदद मिलती है? http://stackoverflow.com/questions/14810409/save-plots-made-in-a-shiny-app –

उत्तर

5

तो आखिरकार मैंने इसे बाहर निकाला है।

उदाहरण के लिए डेटा POA सेट इस नेस्टेड क्वेरी में नहीं पाया जा सकता है -

ggplot डेटा नेस्टेड ggplot क्वेरी में सेट खोजने में सक्षम हो करवाने के लिए, डेटा प्रश्न में सेट < < का उपयोग कर असाइन किया जाना आवश्यक जब एक समारोह के अंदर बुलाया जा रहा है।

print(ggmap(map)) + geom_polygon(data = poa, aes(x = LON, y = LAT, group = order), alpha = .5, colour = "black", fill = NA)) 

तो तुम समारोह में POA उपयोग करने के लिए मदद से इस लाइन

poa <<- poa 

का उपयोग की जरूरत है इससे पहले कि: "ऑपरेटरों < < - और - >> सामान्य रूप से केवल कार्यों में किया जाता है, और वैरिएबल के मौजूदा परिभाषा के लिए पैरेंट वातावरण के माध्यम से एक खोज का कारण बनता है। "

2

यह एक मुश्किल से एक है। मैं इस जवाब को संपादित कर सकता हूं क्योंकि मुझे ggplot के पर्यावरण घोंसले से थोड़ा बेहतर परिचित होना पड़ता है। लेकिन यहां संशोधित खंड है जो इसे मेरे लिए काम करता है:

 env <- environment() 

     print(ggmap(map, base_layer = ggplot(data = poa, aes(x = LON, y = LAT), environment=env), extent = "normal", maprange = FALSE, environment=environment()) + 
        geom_polygon(data = poa, aes(x = LON, y = LAT), alpha = .5, colour = "black", fill = NA, environment=env) + 
        coord_map(projection = "mercator", 
          xlim = c(attr(map, "bb")$ll.lon, attr(map, "bb")$ur.lon), 
          ylim = c(attr(map, "bb")$ll.lat, attr(map, "bb")$ur.lat))) 

यहां कुछ बातें ध्यान देने योग्य हैं।

  1. मैंने group = order निर्देश हटा दिया, क्योंकि इससे "पंक्तियों की भिन्न संख्या" त्रुटि उत्पन्न होती है। सुनिश्चित नहीं है कि आप वहां क्या हैं, लेकिन यह सही नहीं दिखता है।
  2. मैं पर्यावरण को संग्रहीत करता हूं जिसमें poaenv नामक चर में मौजूद है। यह वह वातावरण है जिसे आप किसी भी फ़ंक्शन में उपयोग करना चाहते हैं जो poa का संदर्भ देता है।
  3. मैं geom_polygon और ggplot पर कॉल का निर्देश देता हूं जो मैंने अभी बनाया है, जिसे मैंने environment=env पैरामीटर निर्दिष्ट करके बनाया है।
  4. मैं उस आदेश में अंतिम पैरामीटर के रूप में environment=environment() का उपयोग कर कॉलिंग पर्यावरण में निष्पादित करने के लिए बाहरी ggmap कॉल को निर्देशित करता हूं। इसके बिना, यह हमारे द्वारा बनाए गए env चर को खोजने में सक्षम नहीं होगा।

उन परिवर्तनों के साथ, चीजें ठीक से काम करने लगती हैं।

+0

उत्तर जेफ के लिए धन्यवाद, दुर्भाग्य से मुझे आपके द्वारा किए गए नतीजे नहीं मिलते हैं। मुझे अभी भी त्रुटि मिल रही है 'ggplot में त्रुटि (डेटा = poa, aes (x = LON, y = LAT), पर्यावरण = env): ऑब्जेक्ट' poa 'नहीं मिला'। यह सुनिश्चित करने के लिए कि हम समान सेटिंग्स का उपयोग कर रहे हैं, मैंने मुख्य प्रश्न में sessionInfo का आउटपुट जोड़ा है – user1414259

0

जब मैं बदलता हूं उदाहरण के लिए group = POAOBS ऐप काम करता है।

संबंधित मुद्दे