R 中带有位置的热图

时间:2021-03-23 19:39:18

标签: r ggplot2 heatmap raster stat-density2d

我正在尝试绘制一个国家的热图,其中包含一些事件发生概率的点。 我现在所做的是下一步:

library(raster)
library(ggplot2)
Uruguay  <- getData("GADM",country="Uruguay",level=0)
ggplot(Uruguay,aes(x=long,y=lat,group=group)) + 
  ggplot2::lims(x = c(-60, -50), y = c(-35, -30))+
  geom_polygon(aes(x = long, y = lat, group = group, fill=id),color="grey30")+
  coord_map(xlim=c(-1,1)+bbox(Uruguay)["x",],ylim=c(-1,1)+bbox(Uruguay)["y",])+
  scale_fill_discrete(guide="none")+
  theme_bw()+theme(panel.grid=element_blank())

country border

我生成热图的数据是

prob <- c(10,20,90,40)
lat <- c(-30.52,-32.04,-33.16,-34.28)
long <- c(-57.40,-55.45,-56.35,-56.40)
data <- data.frame(prob, lat, long)

我认为使用 ggplot2::stat_density2dggplot2::scale_fill_gradientn 是可行的方法,但我不知道如何实现。我想制作这样的热图

enter image description here

欢迎任何帮助。 提前致谢。

2 个答案:

答案 0 :(得分:0)

要绘制示例数据,您可以使用 plot

library(raster)
Uruguay  <- getData("GADM",country="Uruguay",level=0)
plot(Uruguay, col="orange")

至于你想要制作的地图,有很多选择。但这是一个基本的例子

prob <- c(10,20,90,40)
lat <- c(-30.52,-32.04,-33.16,-34.28)
long <- c(-57.40,-55.45,-56.35,-56.40)
data <- data.frame(prob, lat, long)

r <- raster(Uruguay, res=.5)
x <- rasterize(cbind(long, lat), r, prob)
plot(x)
lines(Uruguay)

答案 1 :(得分:0)

我终于可以得到我想要的了。 Henrik 在 this post 中的回答非常有帮助 我和你分享代码

library(raster)
library(reshape2)
library(ggplot2)
Uruguay  <- getData("GADM",country="Uruguay",level=1)

#invented data
    prob <- c(5, 90,10,15,99,40,90,25,70,90)
    lat <- c(-31,-31.2,-31.3,-34,-32.5,-32.6,-33.7,-34.9,-34.2,-32.5)
    long <- c(-58.3,-55.1,-57.3,-58.4,-56.5,-54,-57.7,-55.8,-54.1,-53.5)
    prueba <- data.frame(prob, lat, long)
    


library(akima)
fld <- with(prueba, interp(x = long, y = lat, z = prob))

class(Uruguay)
uru <- fortify(Uruguay)

library(reshape2)

# prepare data in long format
df <- melt(fld$z, na.rm = TRUE)
names(df) <- c("x", "y", "prob")
df$long <- fld$x[df$x]
df$lat <- fld$y[df$y]


ggplot() + 
  geom_polygon(data = uru, aes(x = long, y = lat, group = group),
               colour = "black", size = 0.5, fill = "white") +
  geom_tile(data = df, aes(x = long, y = lat, z = prob, fill = prob), alpha = 0.8) +
  ggtitle("Frost probability") +
  xlab("Longitude") +
  ylab("Latitude") +
  scale_fill_continuous(name = "Probability (%)",
                        low = "red", high = "blue") +
  theme_bw() +`enter code here`
  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()