我找到了以下来源,其中记录了如何创建世界地图的热图。
# load required packages
library(ggplot2)
library(mapdata)
# create example data with coordinates and values
lon <- c(9.481544, 2.352222, -74.005973, 139.650312)
lat <- c(51.312801, 48.856613, 40.712776, 35.676191)
value <- c(12, 15, 19, 30)
foo1 <- data.frame(lon, lat, value)
# get world map data
world_map <- map_data("world")
# create heat map using ggplot2
ggplot() +
geom_polygon(data = world_map, aes(x = long, y = lat, group = group), fill = "white", color = "grey") +
geom_point(data = foo1, aes(x = lon, y = lat, fill = value), size = 5, shape = 21) +
scale_fill_gradient(low = "white", high = "red") +
labs(x = "Longitude", y = "Latitude", title = "Example Heat Map")
但是,当我想用自己的数据复制此数据时,因为我的纬度/经度数据仅在澳大利亚境内,所以我只想看到澳大利亚出现在地图上,因为使用上面的代码很难将热图视为澳大利亚只占地图的一小部分。根据文档here,“mapdata”包似乎没有仅适用于澳大利亚的选项。
有谁知道我如何修改示例代码来实现我想要的效果?或者还有其他方法可以创建澳大利亚的热图吗?
您可以在
region
地图中定义world
。如果您决定使用 ggplot2::map_data()
和 ggplot2::geom_polygon()
,您可能至少需要对地图投影进行一些控制,这就是 coord_sf()
的作用。
library(ggplot2)
# define a region to get Australia
map_aus <- map_data("world", region = "Australia")
# generate example data considering map coordinates
set.seed(42)
example_data <- data.frame(
lon = rnorm(10, mean = 135, sd = 8 ),
lat = rnorm(10, mean = -25, sd = 3 ),
value = runif(10,1,100)
)
# create heat map using ggplot2
p <-
ggplot() +
geom_polygon(data = map_aus, aes(x = long, y = lat, group = group), fill = "white", color = "grey") +
geom_point(data = example_data, aes(x = lon, y = lat, fill = value), size = 5, shape = 21) +
scale_fill_gradient(low = "white", high = "red") +
labs(x = "Longitude", y = "Latitude", title = "Example Heat Map")
p
p + coord_sf(crs = 3857) + ggtitle("WGS84 / Pseudo-Mercator")
p + coord_sf(crs = 3107) + ggtitle("GDA94 / SA Lambert")
创建于 2024-03-25,使用 reprex v2.1.0