我想知道是否有办法将多个组的直方图的高度标准化,以便它们的第一个高度都是= 1.例如:
results <- rep(c(1,1,2,2,2,3,1,1,1,3,4,4,2,5,7),3)
category <- rep(c("a","b","c"),15)
data <- data.frame(results,category)
p <- ggplot(data, aes(x=results, fill = category, y = ..count..))
p + geom_histogram(position = "dodge")
给出3组的常规直方图。 还
results <- rep(c(1,1,2,2,2,3,1,1,1,3,4,4,2,5,7),3)
category <- rep(c("a","b","c"),15)
data <- data.frame(results,category)
p <- ggplot(data, aes(x=results, fill = category, y = ..ncount..))
p + geom_histogram(position = "dodge")
给出一个直方图,其中每个组被归一化为最大高度为1。 我想得到一个直方图,其中每个组被标准化为第一个高度为1(所以我可以显示增长)但我不明白是否有适当的替代..ncount或..count ..或者如果有人可以帮助我理解..count的结构..我可以从那里弄明白。 谢谢!
答案 0 :(得分:2)
我敢打赌,有一种很好的方法可以在ggplot
内完成所有事情。但是,我倾向于在将其插入ggplot
之前准备好所需的数据集。如果我理解正确,你可以尝试这样的事情:
# convert 'results' to factor and set levels to get an equi-spaced 'results' x-axis
df$results <- factor(df$results, levels = 1:7)
# for each category, count frequency of 'results'
df <- as.data.frame(with(df, table(results, category)))
# normalize: for each category, divide all 'Freq' (heights) with the first 'Freq'
df$freq2 <- with(df, ave(Freq, category, FUN = function(x) x/x[1]))
ggplot(data = df, aes(x = results, y = freq2, fill = category)) +
geom_bar(stat = "identity", position = "dodge")
答案 1 :(得分:0)
看起来..density..
做了你想做的事,但我不能在我的生活中找到它的文档。在你的两个例子中,它都能满足您的需求!
results <- rep(c(1,1,2,2,2,3,1,1,1,3,4,4,2,5,7),3)
category <- rep(c("a","b","c"),15)
data <- data.frame(results,category)
p <- ggplot(data, aes(x=results, fill = category, y = ..density..))
p + geom_histogram(position = "dodge")