我正在尝试创建一个直方图,并通过变量对输出进行加权。在这个例子中,我希望value
的直方图加权amount
。我确实搜索了之前的帖子,但这似乎没有解决我的问题。
我想解决两个问题:
我期望直方图中的加权结果不同。我预计“2”值的条形值等于16%,“3”值的条形值等于24%,“4”值的条形值为18%,“5”值的值为有42%的酒吧。
我不知道为什么直方图中显示“0”值等于100%的黑条。
以下是可重现的例子:
library(ggplot2)
amount <- c(rep(0.02, 50), rep(0.03, 50))
value <- c(rep(2, 20), rep(3, 30), rep(4, 15), rep(5, 35))
my_df <- data.frame(amount, value)
xvar <- my_df$value
weight <- my_df$amount
histogram <- ggplot(my_df, aes(xvar))
histogram <- histogram + geom_histogram(aes(weight))
histogram <- histogram + geom_histogram(binwidth=0.25,
colour="black", fill="white")
plot(histogram)
答案 0 :(得分:0)
好的,我弄清楚我做错了什么。再次感谢joran,你仍然帮助我。我想我被y轴上的单位抛弃了,我需要添加 pct ,如下所示,以获得我期望的结果。
我没有意识到这里的重量总计每个“2”值的数量,而不是总数数量的百分比是“2”(即,0.02 * 20 = 0.4而不是0.02 * 20 / 2.5 = 16%)。图形条看起来相对相同,单位只是不同。
我还更紧凑地编写了代码,但是会喜欢任何提高它的技巧。
这是我修改后的代码,它让我得到了我想要的东西:
library(ggplot2)
library(dplyr)
amount <- c(rep(0.02, 50), rep(0.03, 50))
value <- c(rep(2, 20), rep(3, 30), rep(4, 15), rep(5, 35))
my_df <- data.frame(amount, value)
my_df <- my_df %>%
mutate(pct = amount/sum(amount))
histogram <- ggplot(my_df,aes(x = value, weight = pct)) +
geom_histogram(binwidth=0.25, colour="black", fill="white")
plot(histogram)
最后,我注意到下面的重量位置也有效,我发现这有点令人困惑,因为我不知道是否有一个正确的位置来增加重量:
histogram <- ggplot(my_df,aes(x = value)) +
geom_histogram(aes(weight = pct), binwidth=0.25, colour="black", fill="white")