[英]Plotting contours on an irregular grid
我已經在 R 中瀏覽了一頁又一頁的等高線圖(包括許多關於 stackoverflow 的提示),但沒有成功。 這是我的輪廓數據,包括添加盧旺達地圖(數據由 14 個經度、緯度和降雨值組成,如 x、y 和 z):
Lon Lat Rain
28.92 -2.47 83.4
29.02 -2.68 144
29.25 -1.67 134.7
29.42 -2.07 174.9
29.55 -1.58 151.5
29.57 -2.48 224.1
29.6 -1.5 254.3
29.72 -2.18 173.9
30.03 -1.95 154.8
30.05 -1.6 152.2
30.13 -1.97 126.2
30.33 -1.3 98.5
30.45 -1.81 145.5
30.5 -2.15 151.3
這是我從stackoverflow嘗試的代碼:
datr <- read.table("Apr0130precip.txt",header=TRUE,sep=",")
x <- datr$x
y <- datr$y
z <- datr$z
require(akima)
fld <- interp(x,y,z)
par(mar=c(5,5,1,1))
filled.contour(fld)
插值失敗。將不勝感激。
以下是使用base
R 圖形和ggplot
一些不同可能性。 生成簡單的等高線圖和地圖頂部的圖。
library(akima)
fld <- with(df, interp(x = Lon, y = Lat, z = Rain))
filled.contour
base
R 圖filled.contour(x = fld$x,
y = fld$y,
z = fld$z,
color.palette =
colorRampPalette(c("white", "blue")),
xlab = "Longitude",
ylab = "Latitude",
main = "Rwandan rainfall",
key.title = title(main = "Rain (mm)", cex.main = 1))
geom_tile
和stat_contour
基本ggplot
替代方案library(ggplot2)
library(reshape2)
# prepare data in long format
df <- melt(fld$z, na.rm = TRUE)
names(df) <- c("x", "y", "Rain")
df$Lon <- fld$x[df$x]
df$Lat <- fld$y[df$y]
ggplot(data = df, aes(x = Lon, y = Lat, z = Rain)) +
geom_tile(aes(fill = Rain)) +
stat_contour() +
ggtitle("Rwandan rainfall") +
xlab("Longitude") +
ylab("Latitude") +
scale_fill_continuous(name = "Rain (mm)",
low = "white", high = "blue") +
theme(plot.title = element_text(size = 25, face = "bold"),
legend.title = element_text(size = 15),
axis.text = element_text(size = 15),
axis.title.x = element_text(size = 20, vjust = -0.5),
axis.title.y = element_text(size = 20, vjust = 0.2),
legend.text = element_text(size = 10))
ggplot
在谷歌地圖的創建ggmap
# grab a map. get_map creates a raster object
library(ggmap)
rwanda1 <- get_map(location = c(lon = 29.75, lat = -2),
zoom = 9,
maptype = "toner",
source = "stamen")
# alternative map
# rwanda2 <- get_map(location = c(lon = 29.75, lat = -2),
# zoom = 9,
# maptype = "terrain")
# plot the raster map
g1 <- ggmap(rwanda1)
g1
# plot map and rain data
# use coord_map with default mercator projection
g1 +
geom_tile(data = df, aes(x = Lon, y = Lat, z = Rain, fill = Rain), alpha = 0.8) +
stat_contour(data = df, aes(x = Lon, y = Lat, z = Rain)) +
ggtitle("Rwandan rainfall") +
xlab("Longitude") +
ylab("Latitude") +
scale_fill_continuous(name = "Rain (mm)",
low = "white", high = "blue") +
theme(plot.title = element_text(size = 25, face = "bold"),
legend.title = element_text(size = 15),
axis.text = element_text(size = 15),
axis.title.x = element_text(size = 20, vjust = -0.5),
axis.title.y = element_text(size = 20, vjust = 0.2),
legend.text = element_text(size = 10)) +
coord_map()
ggplot
# Since I don't have your map object, I do like this instead:
# get map data from
# http://biogeo.ucdavis.edu/data/diva/adm/RWA_adm.zip
# unzip files to folder named "rwanda"
# read shapefile with rgdal::readOGR
# just try the first out of three shapefiles, which seemed to work.
# 'dsn' (data source name) is the folder where the shapefile is located
# 'layer' is the name of the shapefile without the .shp extension.
library(rgdal)
rwa <- readOGR(dsn = "rwanda", layer = "RWA_adm0")
class(rwa)
# [1] "SpatialPolygonsDataFrame"
# convert SpatialPolygonsDataFrame object to data.frame
rwa2 <- fortify(rwa)
class(rwa2)
# [1] "data.frame"
# plot map and raindata
ggplot() +
geom_polygon(data = rwa2, aes(x = long, y = lat, group = group),
colour = "black", size = 0.5, fill = "white") +
geom_tile(data = df, aes(x = Lon, y = Lat, z = Rain, fill = Rain), alpha = 0.8) +
stat_contour(data = df, aes(x = Lon, y = Lat, z = Rain)) +
ggtitle("Rwandan rainfall") +
xlab("Longitude") +
ylab("Latitude") +
scale_fill_continuous(name = "Rain (mm)",
low = "white", high = "blue") +
theme_bw() +
theme(plot.title = element_text(size = 25, face = "bold"),
legend.title = element_text(size = 15),
axis.text = element_text(size = 15),
axis.title.x = element_text(size = 20, vjust = -0.5),
axis.title.y = element_text(size = 20, vjust = 0.2),
legend.text = element_text(size = 10)) +
coord_map()
降雨數據的插值和繪圖當然可以以更復雜的方式完成,使用R 中的空間數據的好工具。 認為我的回答是一個相當快速和容易的開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.