I want to make bar charts where the bar minimum can be specified (much like the box in a box and whisker plot). Can barplot do that? I suspect the answer's in ggplot, but I can't find an example. Here's some data:
X Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1 Highest recorded 31.5 31.8 30.3 28.0 24.9 24.4 21.7 20.9 24.5 25.4 26.0 28.7 2 Mean monthly maximum 27.8 28.6 27.0 24.8 22.0 20.0 18.9 18.8 20.4 22.4 23.9 26.8 3 Mean daily maximum 24.2 24.8 23.1 20.9 18.4 16.3 15.5 15.7 16.9 18.3 20.0 22.4 4 Mean 19.1 19.8 18.1 16.2 13.8 11.9 11.2 11.6 12.7 14.1 15.7 17.7 5 Mean daily minimum 14.0 14.7 13.1 11.4 9.2 7.5 6.9 7.4 8.4 10.0 11.4 13.0 6 Mean monthly minimum 7.6 9.1 6.8 3.8 2.3 -0.5 -0.2 1.0 2.3 3.7 5.3 6.7 7 Lowest recorded 4.0 5.6 4.1 -1.3 0.0 -3.1 -2.6 -1.4 -0.8 2.0 2.7 4.1
xaxis =c("J" ,"F" ,"M" ,"A" ,"M" ,"J","J","A", "S", "O","N","D")
So ideally, I end up with a stacked bar for each month, that starts at the 'Lowest recorded' value, rather than at zero.
I've also had a try with superbarplot from the UsingR package. I can get the bars to start where I want, but can't move the x axis down out of the centre of the plot. Thanks in advance.
Floating bar charts are charts with a single or multiple bars floating between a minimum and maximum value instead of being connected to the axis. It displays information as a range of data by plotting two Y-values(low and high) per data point.
Select the column that's immediately to the right of the last column you want frozen. Select the View tab, Windows Group, click the Freeze Panes drop down and select Freeze Panes.
You can use geom_boxplot
in ggplot2
to get what (I think) you want specifying the precomputed values and stat = 'identity'
and use geom_crossbar
to put in the other
# first, your data
weather <- read.table(text = 'X Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1 "Highest recorded" 31.5 31.8 30.3 28.0 24.9 24.4 21.7 20.9 24.5 25.4 26.0 28.7
2 "Mean monthly maximum" 27.8 28.6 27.0 24.8 22.0 20.0 18.9 18.8 20.4 22.4 23.9 26.8
3 "Mean daily maximum" 24.2 24.8 23.1 20.9 18.4 16.3 15.5 15.7 16.9 18.3 20.0 22.4
4 "Mean" 19.1 19.8 18.1 16.2 13.8 11.9 11.2 11.6 12.7 14.1 15.7 17.7
5 "Mean daily minimum" 14.0 14.7 13.1 11.4 9.2 7.5 6.9 7.4 8.4 10.0 11.4 13.0
6 "Mean monthly minimum" 7.6 9.1 6.8 3.8 2.3 -0.5 -0.2 1.0 2.3 3.7 5.3 6.7
7 "Lowest recorded" 4.0 5.6 4.1 -1.3 0.0 -3.1 -2.6 -1.4 -0.8 2.0 2.7 4.1', header =T)
library(reshape2)
library(ggplot2)
# reshape to wide format (basically transposing the data.frame)
w <- dcast(melt(weather), variable~X)
ggplot(w, aes(x=variable,ymin = `Lowest recorded`,
ymax = `Highest recorded`, lower = `Lowest recorded`,
upper = `Highest recorded`, middle = `Mean daily maximum`)) +
geom_boxplot(stat = 'identity') +
xlab('month') +
ylab('Temperature') +
geom_crossbar(aes(y = `Mean monthly maximum` ))+
geom_crossbar(aes(y = `Mean monthly minimum`)) +
geom_crossbar(aes(y = `Mean daily maximum` ))+
geom_crossbar(aes(y = `Mean daily minimum`))
This is partially described in an example in the help for geom_boxplot
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With