मेरे पास अक्षांश, देशांतर और विकिरण के साथ एक सीएसवी फ़ाइल है। डेटा एक ग्रिड की तरह दिखता है और पूरे राज्य में लगभग 100 बिंदु हैं। मुझे पता है कि वहाँ बहुत सारे आर मैपिंग विकल्प हैं, लेकिन मेरे पास जो कुछ है उसे लेना सबसे आसान लगता है और बिंदु से बिंदु तक एक ढाल बनाने की कोशिश करता है, इसलिए यह एक हीट मैप जैसा दिखता है। मुझे लगता है कि सभी हीट मैप विकल्प घनत्व से काम करते हैं और जब मैं इन डेटा के साथ उनका उपयोग करता हूं तो वे सटीक नहीं दिखते। क्या कोई ऐसा फ़ंक्शन है जिसका उपयोग मैं बिंदुओं के बीच के रंगों को सुचारू करने के लिए कर सकता हूं?

यहाँ संख्याओं की बहुत छोटी श्रेणी के साथ एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण दिया गया है:

lat    lon    value
40.5   -91.5  4513619
41.0   -95.5  4490658
41.5   -96.0  4453810
41.5   -94.5  4475373
42.0   -95.5  4432107  
42.0   -94.5  4416015   

ggplot(df, aes(x = lon, y = lat, color = value)) + 
  geom_point(size=8) + 
  coord_equal() + 
  xlab('Longitude') + 
  ylab('Latitude')
1
Nazer 3 अक्टूबर 2019, 23:52

1 उत्तर

सबसे बढ़िया उत्तर

हम हीटमेप बनाने के लिए ggplot2 पैकेज से geom_tile का उपयोग कर सकते हैं।

library(ggplot2)

ggplot(df, aes(x = lon, y = lat, fill = value)) + 
  geom_tile(color = "black") +
  scale_fill_viridis_c() +
  coord_equal() + 
  xlab('Longitude') + 
  ylab('Latitude') +
  theme_bw() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank())

enter image description here

चूंकि आपने केवल छह डेटा पॉइंट प्रदान किए हैं, इसलिए प्लॉट अजीब लग रहा है। नीचे मैंने आपके उदाहरण डेटासेट को पूरा किया और विस्तृत किया, और फिर डेटा को प्लॉट करने के लिए उसी कोड का उपयोग किया।

library(dplyr)
library(tidyr)

set.seed(123)

df2 <- df %>%
  complete(lat, lon = seq(-96, -91.5, by = 0.5)) %>%
  mutate(value = ifelse(is.na(value), sample(df$value, n(), replace = TRUE), value))

ggplot(df2, aes(x = lon, y = lat, fill = value)) + 
  geom_tile(color = "black") +
  scale_fill_viridis_c() +
  coord_equal() + 
  xlab('Longitude') + 
  ylab('Latitude') +
  theme_bw() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank())

enter image description here

अंत में, चूंकि आप एक स्थानिक डेटासेट के साथ काम कर रहे हैं, आइए डेटा को रैस्टर में बदलें और इसे mapview पैकेज का उपयोग करके प्लॉट करें।

library(sp)
library(sf)
library(raster)
library(mapview)

df_sp <- df2 %>%
  st_as_sf(coords = c("lon", "lat"), crs = 4326) %>%
  as("Spatial") 

r <- raster(ncol = 10, nrow = 4)
extent(r) <- extent(df_sp)
r <- rasterize(df_sp, r, df_sp$value)

mapview(r)

enter image description here

डेटा

df <- read.table(text = "lat    lon    value
40.5   -91.5  4513619
41.0   -95.5  4490658
41.5   -96.0  4453810
41.5   -94.5  4475373
42.0   -95.5  4432107  
42.0   -94.5  4416015",
                 header = TRUE)
1
www 4 अक्टूबर 2019, 02:24