Normalizacja osi y w histogramach w r ggplot do proporcji

Mam bardzo proste pytanie, które powoduje, że walnę głową w ścianę.

Chciałbym przeskalować oś Y mojego histogramu, aby odzwierciedlić proporcję (0 do 1), którą tworzy każdy pojemnik, zamiast mieć powierzchnię słupków sumującą się do 1, Jak używając y=..gęstość.. czy, lub mając najwyższy pasek jest 1, Jak y=..ncount.. tak.

Moje dane wejściowe to lista nazw i wartości, sformatowana tak:

name    value
A   0.0000354
B   0.00768
C   0.00309
D   0.000123
Jedna z moich nieudanych prób:
library(ggplot2)
mydataframe < read.delim(mydata)
ggplot(mydataframe, aes(x = value)) +
geom_histogram(aes(x=value,y=..density..))

To daje mi histogram z obszarem 1, ale wysokości 2000 i 1000:

spróbuj

I y=..ncount.. daje mi histogram z najwyższym paskiem 1.0 i reszta skalowana do niego:

spróbuj

Ale chciałbym, aby pierwszy pasek miał wysokość 0,5, a pozostałe dwa 0,25.

R nie rozpoznaje również tych zastosowań scale_y_continuous.

scale_y_continuous(formatter="percent")
scale_y_continuous(labels = percent)
scale_y_continuous(expand=c(1/(nrow(mydataframe)-1),0)
Dziękuję za pomoc.
Author: gkcn, 2012-08-02

3 answers

Zauważ, że ..ncount.. przeskalowuje się do maksimum 1,0, podczas gdy ..count.. jest liczbą Nie skalowanych koszy.

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

Co daje:

Tutaj wpisz opis obrazka

 51
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-01 20:34:18

Począwszy od ggplot2 0.9, wiele funkcji formatera zostało przeniesionych do pakietu scales, w tym 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())
 12
Author: aaronwolen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-01 20:37:15

Od najnowszej i największej wersji ggplot2 3.0.0, format uległ zmianie. Teraz możesz zawinąć wartość y w stat() zamiast mieszać ...

ggplot(mydataframe, aes(x = value)) +
  geom_histogram(aes(y = stat(count / sum(count))))
 1
Author: CephBirk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 23:07:53