相关疑难解决方法(0)

geom_raster中值范围内的非线性颜色分布

我遇到了以下问题:一些极端值主导着我的geom_raster情节的色阶.一个例子可能更清楚(请注意,此示例仅适用于最近的ggplot2版本,我使用0.9.2.1):

library(ggplot2)
library(reshape)
theme_set(theme_bw())

m_small_sd = melt(matrix(rnorm(10000), 100, 100))
m_big_sd = melt(matrix(rnorm(100, sd = 10), 10, 10))
new_xy = m_small_sd[sample(nrow(m_small_sd), nrow(m_big_sd)), c("X1","X2")]
m_big_sd[c("X1","X2")] = new_xy
m = data.frame(rbind(m_small_sd, m_big_sd))
names(m) = c("x", "y", "fill")

ggplot(m, aes_auto(m)) + geom_raster() + scale_fill_gradient2()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在我通过将某个分位数上的值设置为等于该分位数来解决此问题:

qn = quantile(m$fill, c(0.01, 0.99), na.rm = TRUE)
m = within(m, { fill = ifelse(fill < qn[1], qn[1], fill)
                fill = ifelse(fill > qn[2], qn[2], fill)})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这并不是一个真正的最佳解决方案.我想要做的是将颜色的非线性映射到值的范围,即在具有更多观察值的区域中存在更多颜色.在spplot我可以用classIntervalsclassInt包计算合适的阶级界限:

library(sp)
library(classInt)
gridded(m) = …
Run Code Online (Sandbox Code Playgroud)

r geospatial ggplot2

16
推荐指数
1
解决办法
3929
查看次数

标签 统计

geospatial ×1

ggplot2 ×1

r ×1