Вес ggridges по другой переменной - PullRequest
1 голос
/ 21 января 2020

Я пытаюсь визуализировать некоторые данные с помощью графика гребня, но мне интересно, есть ли способ, которым я могу взвесить плотности гребней.

В основном у меня есть следующее:

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 раз (или, «вес» количество раз) и изменить плотность. Хотя не могу понять, как это сделать. Кроме того, в моем наборе данных веса не являются целыми числами, поэтому я надеюсь на лучшее решение.

Или есть другой пакет / метод, который может этого достичь?

1 Ответ

3 голосов
/ 21 января 2020

Для этого набора данных мы можем повторить строки на основе столбца 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

Однако, если у вас есть значения, которые не являются целыми, это не будет работать. На github есть этот открытый вопрос, который вы можете попробовать.

Другой идеей было бы нормализовать ваши веса в исходном наборе данных, чтобы они были целыми числами, округляя их до определенных цифр и умножая их на 10 до степени желаемой точности. Затем вы можете использовать предыдущее решение для вашего фактического набора данных.

...