在潛伏了一段時間之后,這是我在這里的第一個問題——我是一個絕對的新手,所以請原諒對這個論壇的習俗和 R 的技術細節缺乏了解。
我想繪制一張德國地圖,其中聯邦州的填充反映了居民的偏好,就像我在這里所做的那樣:
我的資料如下所示:
| 德州 | 香腸 |
|---|---|
| 巴登-符騰堡州 | 28.7% |
| 拜仁 | 31.7% |
| 柏林 | 20% |
| 勃蘭登堡 | 20,8% |
| 不來梅 | 19,2% |
| 漢堡 | 20,6% |
| 黑森州 | 24,4% |
| 梅克倫堡-前波莫瑞 | 24,8% |
| 下薩克森 | 26,5% |
| 北萊茵-威斯特法倫 | 26,6% |
| 萊茵蘭-普法爾茨 | 28,9% |
| 薩爾州 | 27.3% |
| 薩克森 | 22.5% |
| 薩克森-安哈爾特 | 25% |
| 石勒蘇益格-荷爾斯泰因 | 26,6% |
| 圖林根 | 24,1% |
我想像這樣繪制地圖:
#loading libraries
library(ggplot2)
library(raster)
#retrieving map
germany <- getData(country = "Germany", level = 1)
#drawing map as plot
ggplot()
geom_polygon(data = germany,
aes(x = long, y = lat, group = group))
這為我提供了這個
。
我現在的問題是:如何將上表中的資料整合為不同聯邦州的漸變填充?
并且:是否可以在相應聯邦州的圖中顯示百分比,而不是在圖旁邊顯示漸變圖例?
非常感謝您的任何建議,非常感謝!
uj5u.com熱心網友回復:
這應該提供一個啟動器,使用簡單的功能(包sf)并將香腸資料連接到 Bundesland 資料。
我已經創建了 Sausages 資料,假設百分比是數值,如果您的資料如表中所列(即“12,5%”字串),則需要做一些作業來轉換這些資料(通常是以可重復的方式將資料添加到問題中要好得多,即使用dput(your_data)或作為資料框的輸出,即dat <- data.frame(your_variables...))。
抱歉使用點十進制表示法。
library(ggplot2)
library(raster)
library(dplyr)
library(sf)
dat <- structure(list(Bundesland = c("Baden-Württemberg", "Bayern",
"Berlin", "Brandenburg", "Bremen", "Hamburg", "Hessen", "Mecklenburg-Vorpommern",
"Niedersachsen", "Nordrhein-Westfalen", "Rheinland-Pfalz", "Saarland",
"Sachsen", "Sachsen-Anhalt", "Schleswig-Holstein", "Thüringen"
), Sausage = c(0.287, 0.317, 0.2, 0.208, 0.192, 0.206, 0.244,
0.248, 0.265, 0.266, 0.289, 0.273, 0.225, 0.25, 0.266, 0.241)), class = "data.frame", row.names = c(NA,
-16L))
germany <-
getData(country = "Germany", level = 1) %>%
st_as_sf() %>%
left_join(dat, by = c("NAME_1" = "Bundesland"))
ggplot(germany)
geom_sf(aes(fill = Sausage))
geom_sf_text(aes(label = scales::percent(Sausage)))
scale_fill_gradient(low = "yellow", high = "red")
theme(legend.position = "none")

由
uj5u.com熱心網友回復:
你可以用這樣的terra包來做到這一點
library(geodata)
library(terra)
dat <- data.frame(Bundesland = c("Baden-Württemberg", "Bayern", "Berlin", "Brandenburg", "Bremen", "Hamburg", "Hessen", "Mecklenburg-Vorpommern", "Niedersachsen", "Nordrhein-Westfalen", "Rheinland-Pfalz", "Saarland", "Sachsen", "Sachsen-Anhalt", "Schleswig-Holstein", "Thüringen"
), Sausage = c(0.287, 0.317, 0.2, 0.208, 0.192, 0.206, 0.244, 0.248, 0.265, 0.266, 0.289, 0.273, 0.225, 0.25, 0.266, 0.241))
germany <- geodata::gadm("Germany", 1, path=".")
germany = merge(germany, dat, by.x="NAME_1", by.y="Bundesland")
plot(germany, "Sausage", col=heat.colors(25))
text(germany, paste0(round(germany$Sausage * 100), "%"), halo=TRUE, cex=0.8)

為了避免柏林和勃蘭登堡標簽的重疊(這里也壓制了傳說)
xy <- crds(centroids(germany))
i <- which(germany$NAME_1 == "Brandenburg")
xy[i, ] <- xy[i,] c(0.2, -0.4)
plot(germany, "Sausage", col=heat.colors(25), lwd=2, legend=FALSE)
text(vect(xy), paste0(round(germany$Sausage * 100), "%"), halo=TRUE, cex=0.7)

并重現沒有軸或標題的灰度地圖:
plot(germany, "Sausage", col=rev(gray(1:20 / 20)), border=gray(0.9), axes=FALSE, legend=FALSE, main="", mar=0)
text(vect(xy), paste0(round(germany$Sausage * 100), "%"), halo=TRUE, cex=0.7)

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/429481.html
上一篇:在ggplot中繪制多列點
下一篇:試圖用兩條線制作一個ggplot
