График, показывающий % значений выше порогового значения — R / ggplot

#r #ggplot2

Вопрос:

с помощью этого примера данных

 c(5, 5, 5, 10, 20, 25, 25, 25, 30, 30)
 

Как я могу отобразить это на гистограмме, которая показывает диапазон по оси X (от 5 до 30), а Y показывает процент всех значений >= каждый интервал.

т. е. первый бар будет равен 100%, так как все значения равны или превышают 5, следующий будет равен 70% для значений >= 10, затем 60% >>= 20 и так далее…

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

Заранее спасибо за любую помощь!

Комментарии:

1. Вам не хватает данных в вашем примере данных? Другой вариант-запустить dput() ваши данные, скопировать и вставить выходные данные в ваш вопрос

Ответ №1:

Я не уверен, нужен ли вам полный диапазон значений от 5 до 30 по оси x, но вы можете возиться с my_range переменной в приведенном ниже коде,

 library(ggplot2)

values <- c(5, 5, 5, 10, 20, 25, 25, 25, 30, 30)
my_range <- seq(5, 30, 1)
# my_range <- unique(x) # This also works but plot will then be 5..30 on x axis by steps of 5

# For each x range value, find percentage of values greater than or equal to
heights <- lapply(my_range, function(x) sum((values >= x)) / length(values))

# ggplot2
df <- data.frame(x = my_range, y = unlist(heights))

ggplot(df, aes(x = x, y = y))   
  geom_col()