Нормализация оси y в гистограммах в R ggplot до пропорции - программирование

Нормализация оси y в гистограммах в R ggplot до пропорции

У меня есть очень простой вопрос, заставляющий меня ударить головой о стену.

Я хотел бы масштабировать ось y моей гистограммы, чтобы отразить пропорцию (от 0 до 1), которую составляет каждый бит, вместо того, чтобы площадь баров составляла 1, используя плотность y =.... имеет или имеет самый высокий бар равным 1, поскольку y =.. ncount.. делает.

Мой ввод - это список имен и значений, отформатированных так:

name    value
A   0.0000354
B   0.00768
C   0.00309
D   0.000123

Одна из моих неудачных попыток:

library(ggplot2)
mydataframe < read.delim(mydata)
ggplot(mydataframe, aes(x = value)) +
geom_histogram(aes(x=value,y=..density..))

Это дает мне гистограмму с областью 1, но высота 2000 и 1000:

try

и y =.. ncount.. дает мне гистограмму с наивысшим баром 1.0 и остальное масштабируется к ней:

try

но я бы хотел, чтобы первый бар имел высоту 0,5, а остальные два 0,25.

R также не распознает эти применения scale_y_continuous.

scale_y_continuous(formatter="percent")
scale_y_continuous(labels = percent)
scale_y_continuous(expand=c(1/(nrow(mydataframe)-1),0)

Спасибо за любую помощь.

4b9b3361

Ответ 1

Обратите внимание, что ..ncount.. масштабируется до максимума 1.0, а ..count.. - это не масштабированный номер ячейки.

ggplot(mydataframe, aes(x=value)) +
  geom_histogram(aes(y=..count../sum(..count..)))

Что дает:

enter image description here

Ответ 2

Как и в ggplot2 0.9, многие функции форматирования были перенесены в пакет весов, включая percent_format().

library(ggplot2)
library(scales)

mydataframe <- data.frame(name = c("A", "B", "C", "D"),
                          value = c(0.0000354, 0.00768, 0.00309, 0.000123))

ggplot(mydataframe) + 
  geom_histogram(aes(x = value, y = ..ncount..)) +
  scale_y_continuous(labels = percent_format())