R 在ggplot2 stat_binhex中显示每个存储单元的最大频率点
我有一个数据集,其中一个坐标可以重复多次。 我想制作一个hexbinplot,显示坐标在该bin中重复的最大次数。我使用的是R,我更喜欢使用ggplot,这样该图与同一报告中的其他图一致 最小工作示例(箱子显示的是计数,而不是最大值):R 在ggplot2 stat_binhex中显示每个存储单元的最大频率点,r,ggplot2,R,Ggplot2,我有一个数据集,其中一个坐标可以重复多次。 我想制作一个hexbinplot,显示坐标在该bin中重复的最大次数。我使用的是R,我更喜欢使用ggplot,这样该图与同一报告中的其他图一致 最小工作示例(箱子显示的是计数,而不是最大值): 库(ggplot2) 库(数据表) 种子(41) dat我想,在对数据进行了更多的处理之后,我现在明白了。图中的每个箱子代表多个点,例如,(9,9);(9,10)(10,9);(10,10)都在地块的一个箱子中。我必须提醒大家,这是预期的行为。我不清楚你为什么不
库(ggplot2)
库(数据表)
种子(41)
dat我想,在对数据进行了更多的处理之后,我现在明白了。图中的每个箱子代表多个点,例如,(9,9);(9,10)(10,9);(10,10)都在地块的一个箱子中。我必须提醒大家,这是预期的行为。我不清楚你为什么不想这样做。相反,您似乎只想显示其中一个点的值(例如9,9)
我不认为在调用geom_hex
或stat_hexbin
时可以直接执行此操作,因为这些函数试图忠实地表示所有数据。事实上,它们不一定像您所期望的那样需要离散坐标——它们在连续数据上同样有效
出于您的目的,如果您想要更好的控制,您可以使用geom_tile
并自己计算值,例如(使用dplyr
和magrittr
):
值得注意的是,我仍然认为geom_tile
可能更有用,即使它没有那么华丽 你能解释一下“坐标重复的最大次数”是什么意思吗?我正在努力理解计数和“坐标重复次数”之间的区别,不知道在这种情况下如何处理“最大值”。假设点(0,0)和(0,1)在同一个箱子中,并且它们是该箱子中唯一的点。(0,0)出现5次,(0,1)出现3次。在这种情况下,图形将显示8,因为它使用的函数是计数(5+3)。我想使用的是max函数,因此显示5(max(5,3))。感谢@JonNagra的澄清。我猜到了,就在你回答的时候贴了一些东西。我现在明白了你们想做什么,但我真的很纠结于为什么——一个用例,在这个用例中,适当的行为可能有助于阐明一个不同的解决方案(我很难理解,当max丢失了这么多信息时,仅显示max如何帮助显示你们的数据,并对查看者隐藏这些信息)。或者,我在下面发布了一个选项,分别显示所有坐标。我认为我采取了错误的方法。你的帖子回答了我的问题,非常接近我的需要。关于我的动机,我在寻找一个用六边形构建的图形,因为我的真实数据有圆坐标,在这些情况下,六边形比正方形更令人愉快。此外,我还需要不同分辨率的图形(使用bins变量可以很容易地执行)。计数对我来说不是一个合适的指标,因为我正在测量深度,我真正想显示的是是否达到了某个水平。我在查看hexbin库时发现了这篇文章,它正是我所需要的:我可以按x和y对变量进行分组,并使用max而不是sum。我不知道是否应该将我的问题标记为重复。我刚刚更新了答案,以纳入您链接的解决方案。我不认为这个问题是完全重复的,因为它是从一个不同的数据格式开始的。谢谢!我不知道在这种情况下如何处理。
library(ggplot2)
library(data.table)
set.seed(41)
dat<-data.table(x=sample(seq(-10,10,1),1000,replace=TRUE),
y=sample(seq(-10,10,1),1000,replace=TRUE))
dat[,.N,by=c("x","y")][,max(N)]
# No bin should be over 9
p1 <- ggplot(dat,aes(x=x,y=y))+stat_binhex(bins=10)
p1
countedData <-
dat %$%
table(x,y) %>%
as.data.frame()
ggplot(countedData
, aes(x = x
, y = y
, fill = Freq)) +
geom_tile()
ggplot(countedData
, aes(x = as.numeric(as.character(x))
, y = as.numeric(as.character(y))
, z = Freq)) +
stat_summary_hex(fun = max, bins = 10
, col = "white")