Fir*_*ast 46 plot r histogram ggplot2
我有一个非常简单的问题,让我把头撞在墙上.
我想缩放直方图的y轴以反映每个bin组成的比例(0到1),而不是将条的面积总和为1,因为使用y = .. density ...或者最高的条形为1,因为y = .. ncount ..的确如此.
我的输入是名称和值的列表,格式如下:
name value
A 0.0000354
B 0.00768
C 0.00309
D 0.000123
Run Code Online (Sandbox Code Playgroud)
我失败的尝试之一:
library(ggplot2)
mydataframe < read.delim(mydata)
ggplot(mydataframe, aes(x = value)) +
geom_histogram(aes(x=value,y=..density..))
Run Code Online (Sandbox Code Playgroud)
这给了我一个区域为1的直方图,但是高度为2000和1000:
和y = .. ncount ..给我一个最高条1.0的直方图,其余的缩放到它:
但我希望第一个条的高度为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)
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助.
And*_*ndy 64
请注意,..ncount..重新..count..缩放到最大值为1.0,而非缩放的bin计数.
ggplot(mydataframe, aes(x=value)) +
geom_histogram(aes(y=..count../sum(..count..)))
Run Code Online (Sandbox Code Playgroud)
这使:

aar*_*len 16
从ggplot2 0.9开始,许多格式化程序函数都已移至scale包,包括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())
Run Code Online (Sandbox Code Playgroud)
Cep*_*irk 15
截至最新最好的ggplot2版本3.0.0,格式已发生变化.现在你可以包装y价值stat()而不是搞乱..东西.
ggplot(mydataframe, aes(x = value)) +
geom_histogram(aes(y = stat(count / sum(count))))
Run Code Online (Sandbox Code Playgroud)