I concur with Jeff Leek that once spent time learning base graphics in R there is less incentive to learn ggplot2 http://simplystatistics.org/2016/02/11/why-i-dont-use-ggplot2/
However I always hate the way barplot
works. Here is an example:
qc <- read.csv ( textConnection ( "id, OnlinePaper, Q, freq, totals, prop
1, Online, ,1768, 9950, 0.17768844
2, Online, No ,4022, 9950, 0.40422111
3, Online, Yes ,4160, 9950, 0.41809045
4, Paper, , 256, 3355, 0.07630402
5, Paper, No , 979, 3355, 0.29180328
6, Paper, Yes ,2120, 3355, 0.63189270" ))
qc1 <- cast ( qc , OnlinePaper ~ Q74 , value = "prop" )
qc1
barplot ( as.matrix ( qc1 ), beside = T , legend.text = qc1 [, 1 ], ylim = c ( 0 , 1 ))
ggplot ( data = qc , aes ( x = Q , y = prop , fill = OnlinePaper )) +
geom_bar ( stat = "identity" , position = position_dodge ())
Going to extremes
I should say though that I have found barplot can produce very customised graphs that serve a specific purpose such as that below (I have de-identified the content as this is unpublished research)
This made heavy use of the following approach
# original by Joseph Guillaume 2009
SideBySideBarPlot2 <- function ( aggAllData , ... ) {
par ( mar = c ( 8 , 7 , 4 , 2 ))
bp <- barplot ( aggAllData ,
horiz = FALSE ,
col = gray.colors ( nrow ( aggAllData )),
las = 1 , axisnames = FALSE , ... )
labels <- names ( as.data.frame ( aggAllData ))
text ( bp , par ( 'usr' )[ 3 ], labels = labels , srt = 45 ,
adj = c ( 1.1 , 1.1 ), xpd = TRUE , cex = .9 )
return ( bp )
}
# with width = xvar (proportions)