4

我有一个包含 10k 行和 3 列的数据框:xpos、ypos 和集群(集群是从 0 到 9 的数字):http: //pastebin.com/NyQw29tb

我想显示一个六边形图,每个六边形根据该六边形中最常见的簇着色。

到目前为止,我有:

 library(ggplot2)
 library(hexbin)
 ggplot(clusters, aes(x=xpos, y=ypos, z=cluster)) + stat_summary_hex(fun.x=mode)

我认为这给了我想要的东西(即用 0 到 9 的颜色填充每个六边形),但色阶看起来是连续的,我不知道如何让它使用离散的色阶。

输出

对于额外的上下文,这是数据的底层,更混乱的视图,我试图通过使用六边形来平滑:

 qplot(data=clusters, xpos, ypos, color=factor(cluster))

输出2

4

2 回答 2

4

我不知道你stat_summary_hex(fun.x=mode)在做什么,但我很确定这不是你想的那样(mode给出对象的存储模式,而不是统计模式,并且fun.x与 的任何形式参数都不匹配stat_summary_hex)。尝试这个。它将每个 bin 中的观察结果制成表格,并拉出最大计数的标签。

ggplot(clusters, aes(x=xpos, y=ypos, z=cluster)) + stat_summary_hex(fun = function(x) {
    tab <- table(x)
    names(tab)[which.max(tab)]
})

Hexbinned 集群

于 2013-06-28T19:11:23.587 回答
1

我相信这里有两个问题。首先,mode不是您想要的功能(查看帮助-它是“获取或设置对象的类型或存储模式”)。其次,参数 if fun=而不是fun.x=for stat_summary_hex

这里有一个关于模式函数的很好的讨论。推荐的功能是:

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

最后,您要确保将六边形的填充视为离散值。您可以修改该fun函数,使返回值是一个字符(如下面的代码所示)。

这是一个可重现的示例:

library(ggplot2)
library(hexbin)
Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
clusters=data.frame(xpos=rnorm(1000),ypos=rnorm(1000),cluster=rep(1:9,length.out=100))
ggplot(clusters, aes(x=xpos, y=ypos, z=cluster)) +
  stat_summary_hex(fun=function(x){as.character(Mode(x))})

我希望这有帮助。

于 2013-06-28T19:26:07.743 回答