我有一个非常简单的问题,让我把头撞在墙上。
我想缩放直方图的y轴以反映每个bin组成的比例(0到1),而不是将条的面积总和为1,如使用y = .. density。确实,或者最高的条为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:
和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)
感谢您的帮助。
答案 0 :(得分:58)
请注意,..ncount..
重新调整为最多1.0,而..count..
是非缩放的bin计数。
ggplot(mydataframe, aes(x=value)) +
geom_histogram(aes(y=..count../sum(..count..)))
给出了:
答案 1 :(得分:13)
从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())
答案 2 :(得分:8)
从最新和最好的ggplot2版本3.0.0开始,格式已更改。现在,您可以将stat()
的值包装在..
中,而不用弄乱ggplot(mydataframe, aes(x = value)) +
geom_histogram(aes(y = stat(count / sum(count))))
的东西。
FeatureHasher.transform()
答案 3 :(得分:0)
我只想缩放轴,将y轴除以1000,所以我做了:
ggplot(mydataframe, aes(x=value)) +
geom_histogram(aes(y=..count../1000))
答案 4 :(得分:0)