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:
I y=..ncount.. daje mi histogram z najwyższym paskiem 1.0 i reszta skalowana do niego:
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. 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:
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())
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))))
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