Reputation: 253
I have a pv dataframe containing information regarding solar plants. One variable is the generation power in kw:
id power
1 20.1
2 110.1
3 3.0
4 231.9
...
I'm trying to plot an histogram with power as X values with a binwidth of 50 kW. As Y I would like to show the cumulative power for every plant in the range of the bin. I tried this code without success.
ggplot(pv, aes(x = power, y = sum(power)), stat = "bin") +
geom_histogram(stat = "identity", binwidth=50)
I need to calculate the sum by using the cut function or it is possible to generate this graph directly with ggplot2?
Upvotes: 5
Views: 6604
Reputation: 52637
This should do what you want:
set.seed(1)
df <- data.frame(id=1:100, power=rlnorm(100, log(100)))
ggplot(df) +
geom_histogram(aes(x=power, weight=power), binwidth=50) +
ylab("Total Power (kW)")
The weight
aesthetic forces the stat calculation to multiply each count by the corresponding weight, which in this case is equivalent to summing the power values.
And here is a better visualization:
ggplot(transform(df, power.bin=cut(power, 0:24 * 50, include.lowest=TRUE))) +
geom_bar(aes(x=power.bin, y=power), color="white", position="stack", stat="identity") +
ylab("Total Power (kW)") +
scale_x_discrete(drop=F) +
theme(axis.text.x=element_text(angle=90, vjust=.5, hjust=1))
Upvotes: 11