ggmap: formfile থেকে প্লট বহুভুজ


9

Ggmap ব্যবহার করে, আমি কোনও অবস্থানের পয়েন্ট সম্বলিত একটি মানচিত্রে একটি শেফফাইল থেকে পৌরসভার সীমানা (বহুভুজ) অন্তর্ভুক্ত করতে চাই। বহুলিপি প্লট করা বাদে এই লিপিটি সব কিছু করে:

library(rgdal)
library(ggmap)

# Get shapefile with Drammen municipality borders
tmpzip<-tempfile()
tmpdir<-tempfile()
dir.create(tmpdir)
download.file("http://www.kartverket.no/Documents/Kart/N50-N5000%20Kartdata/33_N5000_shape.zip",tmpzip)
unzip(tmpzip, exdir=tmpdir)
kommune <- readOGR(dsn=tmpdir, layer="NO_AdminOmrader_pol")
kommune<-kommune[kommune$NAVN=="Drammen",]
kommune<-spTransform(kommune, CRS("+init=epsg:4326"))

# Get location point data 
subscr<-data.frame(lon=c(10.1237,10.2161,10.2993),lat=c(59.7567,59.7527,59.6863), pop=c(58,12,150))
coordinates(subscr)<-~lon+lat
proj4string(subscr)<-CRS("+init=epsg:4326")

lon <- c(10.0937,10.3293)
lat <- c(59.7916,59.6563)
map <- get_map(location = c(lon[1], lat[2], lon[2], lat[1]),
               maptype = "roadmap", source = "osm", zoom = 11)
p <- ggmap(map) +
  geom_point(data = as.data.frame(subscr), aes(x = lon, y = lat, size=pop),
             colour = "darkgreen") +
  theme_bw()
print(p)

আমি কীভাবে আকৃতি থেকে বহুভুজ প্লট করতে পারি? আমি নিম্নলিখিতটি দিয়ে দ্বিতীয় শেষ লাইনটি প্রতিস্থাপনের চেষ্টা করেছি:

p <- ggmap(map) +
  geom_point(data = as.data.frame(subscr), aes(x = lon, y = lat, size=pop),
             colour = "darkgreen") +
  geom_polygon(data = as.data.frame(kommune)) +
  theme_bw()

তবে তারপরে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

Error: Aesthetics must be either length 1 or the same as the data (1): x, y

উত্তর:


9

as.data.frame()জন্য কাজ করে না SpatialPolgonsযে geom_polygon, কারণ জ্যামিতি হারিয়ে যায়। আপনাকে ব্যবহার ggplot2::fortifyকরতে হবে (ভবিষ্যতে অবহেলিত হতে পারে, দেখুন ?fortify)। প্রস্তাবিত উপায় এখন ব্যবহার করা হয় broom::tidy:

R> library("broom")
R> head(tidy(kommune))
Regions defined for each Polygons
   long   lat order  hole piece group  id
1 10.29 59.72     1 FALSE     1 153.1 153
2 10.32 59.70     2 FALSE     1 153.1 153
3 10.32 59.69     3 FALSE     1 153.1 153
4 10.31 59.68     4 FALSE     1 153.1 153
5 10.30 59.67     5 FALSE     1 153.1 153
6 10.28 59.67     6 FALSE     1 153.1 153

তবে আপনার উদাহরণের সাথে আর একটি সমস্যা দেখা দেয়। যেহেতু বহুভুজটি মানচিত্রের সীমার চেয়ে বড়, ggmapতাই বহুভুজটি সঠিকভাবে ক্লিপ করে না। ggmapস্কেলে সীমাবদ্ধতা সেট করে, এটি এই সীমাগুলির মধ্যে নেই এমন সমস্ত ডেটা ফেলে দেবে।

আপনার কোডটির পরিবর্তিত সংস্করণ এখানে রয়েছে:

p <- ggmap(map, extent = "normal", maprange = FALSE) +
     geom_point(data = as.data.frame(subscr),
                aes(x = lon, y = lat, size=pop),
                colour = "darkgreen") +
     geom_polygon(data = fortify(kommune),
                  aes(long, lat, group = group),
                  fill = "orange", colour = "red", alpha = 0.2) +
     theme_bw() +
     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))

print(p)

ggmap


তুমি আবার আমার দিন বাঁচিয়েছ!
ম্যাথিয়াশ

2

উপরের উত্তরে যুক্ত করতে: যারা তাদের দুর্দান্ত টিউটোরিয়াল / উত্তর অনুসরণ করছেন এবং বহুভুজ ক্লিপিং সম্পর্কে পরবর্তী সমস্যাটি কীভাবে সমাধান করবেন তা ভাবছেন (যেমন আমি ছিলাম!)

Https://stackoverflow.com/questions/13982773/crop-for-spatilpolygonsdataframe- এ ব্যবহারকারী 'স্ট্রিমলাইনমেডোথার' এর সৌজন্যতার উত্তর এখানে দেওয়া হয়েছে

library(maptools)
library(raster)   ## To convert an "Extent" object to a "SpatialPolygons" object.
library(raster)   ## To convert an "Extent" object to a "SpatialPolygons" object.
library(rgeos)
data(wrld_simpl)

# Create the clipping polygon
CP <- as(extent(130, 180, 40, 70), "SpatialPolygons")
proj4string(CP) <- CRS(proj4string(wrld_simpl))

# Clip the map
out <- gIntersection(wrld_simpl, CP, byid=TRUE)

তারপরে যখন আপনি চক্রান্ত করবেন, আপনার কাছে অদ্ভুত ক্লিপিং সমস্যা থাকবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.