gpt4 book ai didi

r - ggplot2中离散发散尺度的中点

转载 作者:行者123 更新时间:2023-12-02 11:25:49 31 4
gpt4 key购买 nike

我正在处理一些网格数据,但在处理离散发散尺度时遇到了问题。具体来说,如何设置中点使其不在范围的中心。这是一个可重现的例子来理解我的意思:

library(ggplot2)
grid <- expand.grid(lon = seq(0, 360, by = 2), lat = seq(-90, 0, by = 2))
grid$z <- with(grid, cos(lat*pi/180) - .7)

ggplot(grid, aes(lon, lat)) +
geom_raster(aes(fill = cut_width(z, .1))) +
scale_fill_brewer(palette = "RdBu")



在这里,尺度的中心不是正值和负值之间的分界线。我知道我可以使用连续比例尺,但我发现颜色越少对我想要展示的内容有帮助。

有没有办法在离散尺度上移动中点?也欢迎其他达到相同结果的替代方案。

最佳答案

问题是您的切割点没有在 0 附近对称下降,而是直接映射到您的颜色。一种方法是手动设置您的切割点,使它们以 0 为中心。然后,请确保不要在图例中删除未使用的级别:

zCuts <-
seq(-.7, 0.7, length.out = 10)

ggplot(grid, aes(lon, lat)) +
geom_raster(aes(fill = cut(z, zCuts))) +
scale_fill_brewer(palette = "RdBu"
, drop = FALSE)

enter image description here

如果您愿意使用渐变而不是这种离散颜色,则可以使用 scale_fill_gradient2默认情况下,它以 0 为中心,范围介于两种颜色之间:
ggplot(grid, aes(lon, lat)) +
geom_raster(aes(fill = z)) +
scale_fill_gradient2()

enter image description here

或者,如果您真的想要 Color Brewer 的插值,您可以设置 limits参数在 scale_fill_distiller并以这种方式获得渐变。在这里,我将它们设置在 +- 0 附近的范围( max(abs(grid$z)) 与 0 的偏差最大,无论是最小值还是最大值,以确保范围是对称的)。如果您使用的可用值超过 11 个,这可能是最好的方法:
ggplot(grid, aes(lon, lat)) +
geom_raster(aes(fill = z)) +
scale_fill_distiller(palette = "RdBu"
, limits = c(-1,1)*max(abs(grid$z))
)

enter image description here

如果您想要更多颜色,而不进行渐变,您可能需要使用更多颜色手动构建自己的调色板。添加的越多,您发现的颜色之间的区别就越小。这是一个将两个调色板拼接在一起的示例,以确保您使用不同的颜色进行工作。
zCuts <-
seq(-.7, 0.7, length.out = 20)

myPallette <-
c(rev(brewer.pal(9, "YlOrRd"))
, "white"
, brewer.pal(9, "Blues"))


ggplot(grid, aes(lon, lat)) +
geom_raster(aes(fill = cut(z, zCuts))) +
scale_fill_manual(values = myPallette
, drop = FALSE)

enter image description here

关于r - ggplot2中离散发散尺度的中点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40407909/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com