首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过另一个变量加权ggridges

通过另一个变量加权ggridges
EN

Stack Overflow用户
提问于 2020-01-21 05:41:05
回答 1查看 394关注 0票数 1

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

基本上,我有以下几点:

代码语言:javascript
复制
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个不同年份的职位样本。我想用山脊图绘制分布随时间的变化,但在数据集中,还有一个“权重”列,这意味着一些样本比其他样本更重要。有没有办法把它合并到我的山脊分布图中?还有,有没有一种方法可以让具有较多样本*权重的行比具有较少样本*权重的行更高?那么,不是将每年的身高正常化为1吗?

代码语言:javascript
复制
ggplot(example,aes(x=position,y=year))+
  ggridges::geom_density_ridges()+
  theme_classic()

我在想,我可以尝试通过管道传输数据集来重复它们拥有的权重值的行数,这样它们就会被计数超过x次(或“权重”次数),并改变密度。不过,我不太明白该怎么做。另外,在我的数据集中,权重不是整数,所以我希望有一个更好的解决方案。

或者,有没有其他包/技术可以实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-21 06:39:36

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

代码语言:javascript
复制
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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59831248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档