【问题标题】:Fill in a gradient across longitude and latitude在经度和纬度上填充渐变
【发布时间】:2019-10-03 20:52:30
【问题描述】:

我有一个包含纬度、经度和辐射的 csv 文件。数据看起来像一个网格,全州大约有 100 个点。我知道那里有很多 R 映射选项,但似乎最容易采用我所拥有的并尝试从点到点制作渐变,所以它看起来像一张热图。我看到的所有热图选项都与密度无关,当我将它们与这些数据一起使用时,它们看起来并不准确。有没有可以用来平滑点之间颜色的功能?

这是一个数字范围小得多的可重现示例:

lat    lon    value
40.5   -91.5  4513619
41.0   -95.5  4490658
41.5   -96.0  4453810
41.5   -94.5  4475373
42.0   -95.5  4432107  
42.0   -94.5  4416015   

ggplot(df, aes(x = lon, y = lat, color = value)) + 
  geom_point(size=8) + 
  coord_equal() + 
  xlab('Longitude') + 
  ylab('Latitude')

【问题讨论】:

  • 您是否尝试过在geom_point 中使用alpha 参数
  • 我做到了,但它仍然看起来像点相互重叠。
  • 您有想要制作的情节示例吗?

标签: r heatmap


【解决方案1】:

我们可以使用ggplot2 包中的geom_tile 来创建heatmep。

library(ggplot2)

ggplot(df, aes(x = lon, y = lat, fill = value)) + 
  geom_tile(color = "black") +
  scale_fill_viridis_c() +
  coord_equal() + 
  xlab('Longitude') + 
  ylab('Latitude') +
  theme_bw() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank())

由于您只提供了六个数据点,因此该图看起来很奇怪。下面我完成并扩展了您的示例数据集,然后使用相同的代码绘制数据。

library(dplyr)
library(tidyr)

set.seed(123)

df2 <- df %>%
  complete(lat, lon = seq(-96, -91.5, by = 0.5)) %>%
  mutate(value = ifelse(is.na(value), sample(df$value, n(), replace = TRUE), value))

ggplot(df2, aes(x = lon, y = lat, fill = value)) + 
  geom_tile(color = "black") +
  scale_fill_viridis_c() +
  coord_equal() + 
  xlab('Longitude') + 
  ylab('Latitude') +
  theme_bw() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank())

最后,由于您使用的是空间数据集,因此我们只需将数据转换为栅格并使用 mapview 包进行绘制。

library(sp)
library(sf)
library(raster)
library(mapview)

df_sp <- df2 %>%
  st_as_sf(coords = c("lon", "lat"), crs = 4326) %>%
  as("Spatial") 

r <- raster(ncol = 10, nrow = 4)
extent(r) <- extent(df_sp)
r <- rasterize(df_sp, r, df_sp$value)

mapview(r)

数据

df <- read.table(text = "lat    lon    value
40.5   -91.5  4513619
41.0   -95.5  4490658
41.5   -96.0  4453810
41.5   -94.5  4475373
42.0   -95.5  4432107  
42.0   -94.5  4416015",
                 header = TRUE)

【讨论】:

    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2021-02-19
    • 2013-09-09
    相关资源
    最近更新 更多