geom_hex的对数刻度密度着色

时间:2018-09-21 17:51:25

标签: r ggplot2

geom_hex中的ggplot2几何根据六角形箱中落入的点数来为其着色。这对于均匀分布的数据非常有效,但是如果某些区域的密度比其他区域高得多,则效果不是很好-单个非常密集的六边形可能会淹没差异。

如何使密度色标使用对数标尺或其他某种归一化转换?

1 个答案:

答案 0 :(得分:6)

ggplot 的较新版本通过新的stat()内部函数揭秘了夏季指标的计算。这样可以更轻松地修改用于创建十六进制填充的统计信息。例如:

默认计数统计

df <- data.frame(
  x = rnorm(1000),
  y = rnorm(1000)
)

plot.df <- ggplot(data = df, aes(x = x, y = y)) +
  geom_hex(aes(fill = stat(count)))
print(plot.df)

enter image description here

日志计数统计

plot.df.log <- ggplot(data = df, aes(x = x, y = y)) +
  geom_hex(aes(fill = stat(log(count))))
print(plot.df.log)

enter image description here

可以代替log进行所需的任意转换,例如立方根等。

使用cut

为避免创建带有混淆值的标度,可以使用cut建立合理的类别边界,并将其转换为标有原始计数值的数字标度:

plot.df.log.cut <- ggplot(data = df, aes(x = x, y = y)) +
  geom_hex(aes(fill = stat(cut(log(count), breaks = log(c(0, 1, 2, 4, Inf)), labels = F, right = T, include.lowest = T)))) +
  scale_fill_continuous(name = 'count', labels = c('1', '2', '4', '8+'))
print(plot.df.log.cut)

enter image description here