आपके पास कुछ विकल्प हैं। बहुभुज प्लॉट प्राप्त करने के लिए यह बहुत सरल है, लेकिन आपके पास दो अलग-अलग fill
स्केल नहीं हो सकते हैं। यह समाधान बिंदु-आकार एनोटेशन का उपयोग करता है, लेकिन रंग (या दोनों रंग और आकार) द्वारा geom_point
को स्केल करने के लिए बदला जा सकता है। मुझे लगता है कि यह एक बेहतरीन कार्यक्रम में हाथ से दो मानचित्रों को ओवरले करने में सक्षम होने के लिए सबसे अच्छा है।
आप भी (शायद) यू.एस. बाउंडिंग बॉक्स को ट्विक करना चाहते हैं क्योंकि केंद्र थोड़ा सा है (उनमें से कुछ वास्तव में हैं, लेकिन वह वास्तव में स्पष्ट है)।
मैंने अंटार्कटिका को भी हटा दिया। यदि आप चाहें तो इसे वापस जोड़ सकते हैं, लेकिन यह बर्बाद भूखंड अचल संपत्ति आईएमओ है।
library(rgdal)
library(ggplot2)
library(maptools)
library(rgeos)
library(RColorBrewer)
world.map <- readOGR(dsn="/Users/bob/Desktop/TM_WORLD_BORDERS_SIMPL-0.3/", layer="TM_WORLD_BORDERS_SIMPL-0.3")
# Get centroids of countries
theCents <- coordinates(world.map)
# extract the polygons objects
pl <- slot(world.map, "polygons")
# Create square polygons that cover the east (left) half of each country's bbox
lpolys <- lapply(seq_along(pl), function(x) {
lbox <- bbox(pl[[x]])
lbox[1, 2] <- theCents[x, 1]
Polygon(expand.grid(lbox[1,], lbox[2,])[c(1,3,4,2,1),])
})
# Slightly different data handling
wmRN <- row.names(world.map)
n <- nrow([email protected])
[email protected][, c("growth", "category")] <- list(growth = 4*runif(n),
category = factor(sample(1:5, n, replace=TRUE)))
# Determine the intersection of each country with the respective "left polygon"
lPolys <- lapply(seq_along(lpolys), function(x) {
curLPol <- SpatialPolygons(list(Polygons(lpolys[x], wmRN[x])),
proj4string=CRS(proj4string(world.map)))
curPl <- SpatialPolygons(pl[x], proj4string=CRS(proj4string(world.map)))
theInt <- gIntersection(curLPol, curPl, id = wmRN[x])
theInt
})
# Create a SpatialPolygonDataFrame of the intersections
lSPDF <- SpatialPolygonsDataFrame(SpatialPolygons(unlist(lapply(lPolys,
slot, "polygons")), proj4string = CRS(proj4string(world.map))),
[email protected])
whole <- world.map[grep("Antarctica", world.map$NAME, invert=TRUE),]
half <- lSPDF[grep("Antarctica", lSPDF$NAME, invert=TRUE),]
whole <- fortify(whole, region="ISO3")
half <- fortify(half, region="ISO3")
world.map$scaled_growth <- as.numeric(scale([email protected]$growth,
center = min([email protected]$growth),
scale = max([email protected]$growth)))
growth <- [email protected][,c("ISO3", "scaled_growth")]
colnames(growth) <- c("id", "scaled_growth")
growth$scaled_growth <- factor(as.numeric(cut(growth$scaled_growth, 8))) # make it discrete
half_centers <- data.frame(cbind(coordinates(gCentroid(lSPDF, byid = TRUE)),
[email protected]$ISO3, [email protected]$category))
half_centers$category <- factor(half_centers$category)
gg <- ggplot()
gg <- gg + geom_map(data=whole, map=whole, aes(x=long, y=lat, map_id=id), alpha=0, color="black", size=0.15)
gg <- gg + geom_map(data=growth, map=whole, aes(fill=scaled_growth, map_id=id))
gg <- gg + geom_map(data=half, map=half, aes(x=long, y=lat, map_id=id), fill="white")
gg <- gg + geom_point(data=half_centers, aes(x=x, y=y, shape=category), size=2)
gg <- gg + scale_fill_brewer(palette="Pastel2")
gg <- gg + scale_shape_discrete()
gg <- gg + coord_equal()
gg
से बचने में मदद करता है तो क्या आप मूल प्रश्न के समान परिणाम प्राप्त करना चाहते हैं? – Konrad
मैं * उत्तर * के समान परिणाम प्राप्त करना चाहता हूं (प्रश्न पहले से ही ggplot2 का उपयोग करता है। उत्तर नहीं है)। –
आपको कुछ समस्याएं होने जा रही हैं क्योंकि ggplot बहुभुज – hrbrmstr