首页 文章

在ggplot2 stat_binhex中显示每个bin的最大频率点

提问于
浏览
1

我有一个数据集,其中一个坐标可以重复几次 . 我想创建一个hexbinplot,显示在该bin中重复坐标的最大次数 . 我正在使用R而我更愿意使用ggplot,因此图表与同一报告中的其他图表一致 .

最小工作示例(分档显示计数而非最大值):

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

我认为这种方法应该与这个问题有关:calculating percentages for bins in ggplot2 stat_binhex但我不确定如何使其适应我的情况 . 此外,我担心这个问题ggplot2: ..count.. not working with stat_bin_hex anymore因为它可以使我的目标比我最初的想法更难 .

是否可以使垃圾箱显示重复点的最大次数?

1 回答

  • 1

    我认为,在更多地使用数据之后,我现在明白了 . 图中的每个箱表示多个点,例如(9,9);(9,10)(10,9);(10,10)都在图中的单个箱中 . 我必须提醒,这是预期的行为 . 我不清楚为什么你不想这样做 . 相反,您似乎想要显示其中一个点的值(例如9,9) .

    我不认为您可以直接在 geom_hexstat_hexbin 的调用中执行此操作,因为这些函数正在尝试忠实地表示所有数据 . 实际上,它们并不一定像您一样期望离散坐标 - 它们在连续数据上同样有效 .

    为了您的目的,如果您想要更好的控制,您可能希望改为使用 geom_tile 并自己计算值,例如 . (使用 dplyrmagrittr ):

    countedData <-
      dat %$%
      table(x,y) %>%
      as.data.frame()
    
    ggplot(countedData
           , aes(x = x
                 , y = y
                 , fill = Freq)) +
      geom_tile()
    

    并且您可以从那里稍微使用表示,但它至少会更忠实地显示每个单独的坐标 .

    或者,您可以过滤原始数据,仅包括bin中最大的点 . 这将要求您匹配binning,但至少可以选择 .

    为了完整起见,这里是如何适应@Jon Nagra(OP)linked tostat_summary_hex 解决方案 . 请注意,还有一些额外的步骤,所以我认为这并不重复 . 具体来说,上面的表步骤需要生成可用作摘要的 z 的内容,然后您需要将x和y从因子转换回原始比例 .

    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")
    

    值得注意的是,我仍然认为 geom_tile 可能更有用,即使它不是那么华丽 .

相关问题