在 2 个地块上保持与 trans log10 一致的scale_fill_gradient

问题描述 投票:0回答:1

我无法通过我正在使用的一些地图获取所需的scale_fill_gradient。我正在寻找的是具有完全相同的色标(如十六进制代码对应于完全相同的填充值)并具有 log10 转换的 2 个热图,而 2 个数据集具有不同的最大值。

这就是我的单个热图,我喜欢这个结果:

heatmap <- statebase +
  geom_sf(data=heatbycounties, color="NA", aes(fill=fy16map)) + 
  scale_fill_gradient(trans="log10", low = "#F1EFEF", high = "#F25430", na.value = "#F1EFEF") + 
  geom_sf(data = c_states, color="white", fill="NA") + #adding white state lines back on top
  theme(axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        rect = element_blank(),
        plot.background = element_rect(fill="white"))`\

但是,如果我只是用单独的数据集(fy16map 和 fy22map)以这种方式生成两个地图,“高”颜色对应于不同的值,因此整个渐变也是如此。

我在scale_fill_gradient和scale_fill_gradientn中使用不同的参数组合进行了各种尝试,但大多数都会导致错误代码。我能够生成一个具有定义的色标(为“低”和“高”指定值)的颜色标度,但如果没有 log10,它完全难以辨认,因为该国的大部分地区都非常低 - 它就像一张白色地图,上面有一些橙色斑点。

是否可以同时包含 trans log10 指定梯度的最小值和最大值?当然,这有一个简单的解决方案,但我是 R 新手!谢谢!

ggplot2 maps geom
1个回答
0
投票

解决方案1:

您可以尝试将填充渐变的限制设置为两个数据集中的最小值(分别为最大值),并使用

oob = squish
包中的
scales
。 请注意,您必须首先确定最小值和最大值,因为我不知道您正在使用什么数据。

library(scales)

+ scale_fill_gradient(trans="log10", low = "#F1EFEF", high = "#F25430", na.value = "#F1EFEF", 
limits=c(min(log10(fy16map)), max(log10(fy16map)), oob=squish))

(也许)解决方案2:

您还可以使用

t(scale(t(mat)))
缩放矩阵。如果我没记错的话,这会将您的数据转换为均值 0 和标准差 1,因此具有相同的限制。

© www.soinside.com 2019 - 2024. All rights reserved.