在 map 上,我试图用六边形来替换点,但做不到.我试过用geom_hex,但没有得到同样的结果, 有什么建议吗?

ggplot() + 
  geom_point(data=df, aes(x=x, y=y, color = value), linewidth = 1, na.rm = FALSE) +
  scale_colour_gradientn(colours = c('#80146E','#804AA4','#6771B8','#379BC2',
                                     '#3ABCBF','#79D4B8','white','#FCEE88','#F8C34B', 
                                     '#F7A72B', '#F4792D'),
                         values = scales::rescale(-10, -8, -6, -4, -2, -1, 0, 
                                                    0.3, 0.5, 0.7, 1))) + 
  theme_void() + 
  coord_map()

enter image description here

编辑

df <- head(df)
dput(df)
structure(list(x = c(-1.29180627034999, -1.19180627074999, -1.09180627114999, 
-0.991806271549991, -0.891806271949991, -0.791806272349991), 
    y = c(44.24152724085, 44.24152724085, 44.24152724085, 44.24152724085, 
    44.24152724085, 44.24152724085), value = c(-0.709841088006482, 
    -0.889560720544426, -0.998504169250709, -0.905970350930832, 
    -0.888156362836211, -0.960843878765758)), row.names = c(NA, 
6L), class = "data.frame")

推荐答案

我们可以通过获取带有海拔数据的法国栅格,对其进行下采样并转换为x,y,z格式来近似您的数据.

df <- raster::getData('alt', country = 'FRA', mask = TRUE) |>
  raster::aggregate(fact = 15) |>
  raster::rasterToPoints() |>
  as.data.frame() |>
  setNames(c('x', 'y', 'value'))

使用这些点的代码绘制的图类似于您自己的图像,但由于值的不同,其 colored颜色 有所不同

library(ggplot2)

ggplot(df, aes(x, y, color = value)) + 
  geom_point(size = 0.8) +
  theme_void() + 
  scale_colour_gradientn(colours = c('#80146E','#804AA4','#6771B8','#379BC2',
                                     '#3ABCBF','#79D4B8','white','#FCEE88',
                                     '#F8C34B', '#F7A72B', '#F4792D'),
                         values = c(0, 0.01, 0.02, 0.1, 0.3, 0.6, 0.8, 0.85,
                                    0.9, 0.95, 1)) +
  coord_map()

enter image description here

如果你想换成六边形,你需要stat_hex_summary,fun = meanaes(z = value).还记得把你的scale_color_gradientn号改为scale_fill_gradientn

ggplot(df, aes(x, y, z = value)) +
  stat_summary_hex(fun = mean, color = 'white', bins = 60) +
  theme_void() + 
  scale_fill_gradientn(colours = c('#80146E','#804AA4','#6771B8','#379BC2',
                                     '#3ABCBF','#79D4B8','white','#FCEE88',
                                     '#F8C34B', '#F7A72B', '#F4792D'),
                         values = c(0, 0.01, 0.02, 0.1, 0.3, 0.6, 0.8, 0.85,
                                    0.9, 0.95, 1)) +
  coord_map()

enter image description here

如果你想要更大或更小的六边形,减少或增加bins的数量.

R相关问答推荐

使用log 10转换绘制geom_smooth

修改dDeliverr中列表列的最后一个元素

了解.groups的目的= dØr的摘要功能中的删除

如何将log 2刻度上的数字转换为自然log

是否有R函数来判断一个组中的所有值是否与另一个组中的所有值相同?

如何使用R对每组变量进行随机化?

R Sapply函数产生的值似乎与for循环方法略有不同

删除列表中存储的数据帧内和数据帧之间的重复行

计算具有奇数日期的运行金额

在R中为马赛克图中的每个字段着色

如何在Chart_Series()中更改轴值的 colored颜色 ?

使用整齐的计算(curl -curl )和杂音

使用列/行匹配将两个不同维度的矩阵相加

如何从像glm这样的模型中提取系数表的相关性?

计算满足R中条件的连续列

将重复项转换为NA

如何将Which()函数用于管道%>;%

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

在鼠标悬停时使用Plotly更改geom_point大小