2015-06-04 4 views
7

जब मैं एक पर्चे के मानचित्र के लिए एक पुस्तिका में एक किंवदंती जोड़ने की कोशिश करता हूं (Leaflet for R पैकेज का उपयोग करके) एक चमकदार ऐप में शामिल किया गया है, किंवदंती रंग नहीं दिखाती है रंग पैलेट का। इसके बजाए यह केवल एनए मानों के लिए निर्दिष्ट रंग दिखाता है, इस मामले में, सफेद।आर चमकदार ऐप में लिखे गए मानचित्र की किंवदंती रंगों को दिखाता नहीं है

legend without colors

एप्लिकेशन निम्नलिखित है:

  • सबसे पहले, यह उपयोगकर्ता इनपुट
  • तो यह फ़िल्टर किए गए डेटा से एक choropleth नक्शा उत्पन्न करता है के आधार पर डेटा का एक सेट फिल्टर

यह वह कोड है जिसका उपयोग मैंने किंवदंती बनाने के लिए किया था:

addLegend(position = "bottomleft", 
    pal = pal, values = shp.data()$stat.selected, 
    title = "Legend", 
    opacity = .5) 

कहाँ pal एक quantile रंग पैलेट के रूप में इस प्रकार है

pal <-colorQuantile(c("#B2FF66","#66CC00","#4C9900","#336600","#193300"), 
        NULL, n = 5, na.color="#FFFFFF") 

shp.data() एक प्रतिक्रियाशील अभिव्यक्ति उपयोगकर्ता इनपुट के आधार पर किसी शेपफ़ाइल फ़िल्टर किया है और stat_selected विशिष्ट आंकड़ा है कि उपयोगकर्ता रंग पर मानचित्रण के लिए चयन करता है वह यह है कि है।

मैं निम्नलिखित चेतावनी मिलती है:

Warning in is.na(x) : 
    is.na() applied to non-(list or vector) of type 'NULL' 
Warning in is.na(values) : 
    is.na() applied to non-(list or vector) of type 'NULL' 

मैं शुरू में आर पेज के लिए पत्रक पर उदाहरण निम्नलिखित कथा करने की कोशिश की और addLegend समारोह के लिए तर्क values = ~stat.selected इस्तेमाल किया है, लेकिन मैं यह त्रुटि आई:

Error in UseMethod("doResolveFormula") : 
    no applicable method for 'doResolveFormula' applied to an object of class "NULL" 
+1

मदद पृष्ठ से: शून्य है, तो जब भी परिणामी रंग समारोह कहा जाता है, तो x मान डोमेन का प्रतिनिधित्व करेगा। इसका तात्पर्य है कि यदि फ़ंक्शन को कई बार बुलाया जाता है, तो मानों और रंगों के बीच एन्कोडिंग संगत नहीं हो सकती है; यदि स्थिरता की आवश्यकता है, तो आपको एक गैर-संपूर्ण डोमेन प्रदान करना होगा। शायद एनयूएलएल बदलने से मदद मिलेगी? – ytk

उत्तर

2

मैं AddLegend फ़ंक्शन के तर्कों में मूल्य कॉलम का संदर्भ देने के तरीके को बदलकर रंग दिखा रहा था। मैं डबल कोष्ठक है, जो समस्या को ठीक करने लग रहा था में stat.selected चर डाल:

addLegend(position = "bottomleft", 
      pal = pal, values = shp.data()[[stat.selected]], 
      title = "Legend", 
      opacity = 1 
     ) 

स्पष्टीकरण के लिए, stat.selected चर निम्नलिखित स्विच बयान से आता है:

stat.selected <- isolate(switch(input$var.stat, 
           "Total employment" = "tot_emp", 
           "Mean annual wage" = "a_mean", 
           "Mean hourly wage" = "h_mean", 
           "Location quotient" = "loc_quotient" 
) 

जहां "tot_emp", "a_mean", "h_mean", और "loc_quotient"shp.data स्थानिक बहुभुज डेटा फ्रेम में कॉलम नाम हैं।

मुझे लगता है कि समस्या यह थी कि मैं $ का उपयोग करके चर द्वारा कॉलम नाम में पास करने का प्रयास कर रहा था।

मैं अभी भी एक काफी नौसिखिया आर उपयोगकर्ता हूं, इसलिए अगर कोई यह समझा सकता है कि आर दस्तावेज के लिए पत्रक में उदाहरण इस मामले में क्यों काम नहीं करता है तो मैं इसकी सराहना करता हूं।

8

इससे पहले मेरे पास सिर्फ एक साधारण स्निपेट था जो दिखाता है कि किंवदंतियों को कैसे जोड़ा जाए। मैंने पौराणिक मूल्यों के पहले ~ मानक का उपयोग नहीं किया था। मैंने पारंपरिक डेटाफ्रेम $ कॉलम किया और यह अच्छी तरह से काम करता है।

यह अब यह देखने के लिए अपडेट किया गया है कि यह सब एक साथ कैसे फिट बैठता है। सभी परिवर्तनीय कटौती आदि बनाने के बाद यहां एक पूर्ण मैपिंग रन है।अंतिम शुद्ध डेटा फ्रेम को ज़िपडाटा

# create a full popup 
# add some HTML for editing the styles 

zipData$popUp <- paste('<strong>',zipData$Street, '</strong><br>', 
         'TIV = $',prettyNum(zipData$tiv, big.mark = ',',preserve.width = 'none'), '<br>', 
         'City: ', zipData$city, '<br>', 
         'YrBuilt = ', zipData$YearBuilt, '<br>', 
         'Construction = ', zipData$ConstructionCode, '<br>', 
         'Occupancy = ', zipData$OccupancyCode, '<br>', 
         'Premium = $' , prettyNum(zipData$Premium, big.mark = ',',preserve.width = 'none') , '<br>', 
         'GrossArea = ', prettyNum(zipData$GrossArea, big.mark = ',', preserve.width = 'none'), '<br>', 
         'RoofYr = ', zipData$RoofYearBuilt, '<br>') 

# set color scale for key factor 
colorsConst <- colorFactor(rainbow(4), zipData$ConstructionCode) 

# color scales for numerical bins 
colorstivValue <- colorFactor(palette = 'Accent', zipData$tivValueLvl) 
colorsYrBuilt <- colorFactor(palette = 'Spectral', zipData$yrBuiltLvl) 
colorsRoofYrBuilt <- colorFactor(palette = "YlOrRd", zipData$roofYrBuiltLvl) 


# begin the leaflet map construction 
# create the map opbject 

m <- leaflet() %>% 
    addTiles() %>% 

# add different tiles for different color schemes 

    addProviderTiles(providers$OpenStreetMap, group = 'Open SM') %>% 
    addProviderTiles(providers$Stamen.Toner, group = 'Toner') %>% 
    addProviderTiles(providers$CartoDB.Positron, group = 'CartoDB') %>% 
    addProviderTiles(providers$Esri.NatGeoWorldMap, group = 'NG World') %>% 
    setView(lng = -90, lat = 30, zoom = 10) %>% 

############################## 

    # this section is for plotting the variables 
    # each variable below is a layer in the map 

    # construction 
    addCircleMarkers(data = zipData, lat = ~Lat, lng = ~Lon, 
        color = ~colorsConst(ConstructionCode), popup = zipData$popUp, 
        radius = 5, group = 'Construction') %>% 
    # tiv 
    addCircleMarkers(data = zipData, lat = ~Lat, lng = ~Lon, 
        color = ~colorstivValue(tivLvl), popup = zipData$popUp, 
        radius = ~tiv/20000, group = 'Bldg Value') %>% 

    # year built 
    addCircleMarkers(data = zipData, lat = ~Lat, lng = ~Lon, 
        color = ~colorsYrBuilt(yrBuiltLvl), popup = zipData$popUp, 
        radius = ~YearBuilt/250, group = 'Yr Built') %>% 


###################################### 

    # layer control 

    addLayersControl(
     baseGroups = c('Open SM', 'Toner', 'Carto DB', 'NG World'), 

     overlayGroups = c('Construction', 
          'TIV', 
          'Yr Built' 
     ), 
     options = layersControlOptions(collapsed = F) 
    ) %>% 


#################################################  
add the legends for each of the variables 


    # construction   
    addLegend('bottomright', pal = colorsConst, values = zipData$ConstructionCode, 
       title = 'Construction Code', 
       opacity = 1) %>% 

    # tiv 
    addLegend('bottomleft', pal = colorstivValue, values = zipData$tivLvl, 
       title = 'TIV', 
       opacity = 1) %>% 

    # year built 
    addLegend('topleft', pal = colorsYrBuilt, values = zipData$yrBuiltLvl, 
       title = 'Yr Built', 
       opacity = 1) 


m # Print the map 

मानचित्र का एक भाग नीचे दिखाया गया है।

This shows the layer control and the construction legend

+0

1.5 साल बाद क्यों तय नहीं किया गया है, कोई सुराग नहीं है ... – Ufos

+0

किंवदंती केवल तभी उपयोग कर सकती है जब पुस्तिका() कॉल में डेटा होता है; यदि आप पुस्तिका() को डेटा कहते हैं, तो सभी परतें इसका उपयोग कर सकती हैं। जिस तरह से लिखा गया है, केवल addCircleMarkers कॉल को वास्तव में डेटा दिया जा रहा है, क्योंकि यह केवल उस परत को पारित किया जा रहा है। –

+0

जैसा कि जो ने इंगित किया था, ब्रायन का उदाहरण '~ लॉगिन' के साथ भी काम करेगा यदि उसने केवल 'लीफलेट() ' – Ufos

2

मैं

data <- data.frame(lng1 = c(1, 2, 3), 
        lng2 = c(2, 3, 4), 
        lat1 = c(1, 2, 3), 
        lat2 = c(2, 3, 4), 
        values = c(1, 2, 3)) 

    pal_grid <- colorNumeric(palette = "YlGn", domain = data$values) 

    leaflet() %>% 
     addRectangles(lng1 = data$lng1, lat1 = data$lat1, 
       lng2 = data$lng2, lat2 = data$lat2, 
       fillColor = ~pal_grid(data$values), 
       fillOpacity = 0.2, 
       weight = 2, opacity = 0.5) 

समाधान डेटा है कि आप मुख्य कॉल में तत्व बनाने के लिए उपयोग कर रहे हैं पत्रक के लिए प्रदान करना है साथ ही संदेश

Error in UseMethod("doResolveFormula") : no applicable method for 'doResolveFormula' applied to an object of class "NULL" 

था leaflet() पर या उसके बाद जो भी तत्व जोड़ते हैं उसे कॉल में।

  1. मुख्य कॉल में पत्रक के लिए():

    data <- data.frame(lng1 = c(1, 2, 3), 
           lng2 = c(2, 3, 4), 
           lat1 = c(1, 2, 3), 
           lat2 = c(2, 3, 4), 
           values = c(1, 2, 3)) 
    
    pal_grid <- colorNumeric(palette = "YlGn", domain = data$values) 
    
    leaflet(data = data) %>% 
        addRectangles(lng1 = data$lng1, lat1 = data$lat1, 
          lng2 = data$lng2, lat2 = data$lat2, 
          fillColor = ~pal_grid(data$values), 
          fillOpacity = 0.2, 
          weight = 2, opacity = 0.5) 
    
  2. जोड़ने तत्वों की फिलहाल:

    data <- data.frame(lng1 = c(1, 2, 3), 
           lng2 = c(2, 3, 4), 
           lat1 = c(1, 2, 3), 
           lat2 = c(2, 3, 4), 
           values = c(1, 2, 3)) 
    
    pal_grid <- colorNumeric(palette = "YlGn", domain = data$values) 
    
    leaflet() %>% 
        addRectangles(data = data, 
          lng1 = data$lng1, lat1 = data$lat1, 
          lng2 = data$lng2, lat2 = data$lat2, 
          fillColor = ~pal_grid(data$values), 
          fillOpacity = 0.2, 
          weight = 2, opacity = 0.5)` 
    
+0

की बजाय' लीफलेट (ज़िपडेटा)%>%' का उपयोग किया है, वास्तव में मैं 'एनए' के ​​साथ एक उदाहरण भी बना सकता हूं एक बार 'लीफलेट() 'फैशन' leaflet (my_data)' में डेटासेट के साथ प्रदान किया जाता है, एक बार पूरी तरह से ठीक काम करता है। – Ufos

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