【问题标题】:Weight ggridges by another variable另一个变量的权重 ggridges
【发布时间】:2020-05-06 22:22:53
【问题描述】:

我正在尝试使用山脊图来可视化一些数据,但我想知道是否有一种方法可以对山脊的密度进行加权。

基本上我有以下几点:

set.seed(1)
example <- data.frame(matrix(nrow=100,ncol=3))
colnames(example) <- c("year","position","weight")
example$year <- as.character(rep(c(1,2,3,4,5),each=20) )
example$position <- runif(100,1,10)
example$weight <- sample(1:3,100,replace = T)

5 个不同年份的职位样本。我想用脊图绘制分布随时间的变化,但在数据集中,还有一个“权重”列,这意味着一些样本的计数比其他样本多。有没有办法将其合并到我的山脊分布图中?还有一种方法可以使样本*重的行比样本少的行高吗?所以不将每年的高度归一化为一?

ggplot(example,aes(x=position,y=year))+
  ggridges::geom_density_ridges()+
  theme_classic()

我在想我可以尝试通过管道传输数据集以重复行以获取它们拥有的权重值的数量,因此它们的计数次数将超过 x 次(或“权重”次数)并更改密度。不能完全弄清楚如何做到这一点。另外,在我的数据集中,权重不是整数,所以我希望有更好的解决方案。

或者,是否有其他的包/技术可以实现这一目标?

【问题讨论】:

    标签: r ggplot2 tidyverse ggridges ridgeline-plot


    【解决方案1】:

    对于这个数据集,我们可以根据weight 列重复行,然后绘制:

    library(ggplot2)
    library(ggridges)
    
    example2 <- example[rep(seq_along(example$weight), example$weight), ]
    
    ggplot(example2,aes(x=position,y=year))+
      ggridges::geom_density_ridges()+
      theme_classic()
    #> Picking joint bandwidth of 1.02
    

    但是,如果您的 wights 不是整数,这将不起作用。有this open issue on github,您可能想试一试。

    另一个想法是将原始数据集中的权重归一化为整数,方法是将它们四舍五入到某些数字,然后将它们乘以 10 到所需精度的幂。然后,您可以将以前的解决方案用于您的实际数据集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多