[R] barplot y axis too short

Jack Siegrist jacksie at eden.rutgers.edu
Tue Feb 2 18:05:36 CET 2010

Thanks for the replies. 

Apparently you cannot adjust the extension factor used by yaxs (which is set
at 4%), so what I did is 
wrote a function (barplotCovered) to get y-axis limits based on the range of
the data and a user-defined axis expansion factor (axExFact).

I included an example below in case someone else has this problem.

# example data
data <- c(.10, -.15, .52, .11)

# calculate a maximum and minimum for the y-scale:
# takes the biggest datum: max(data)
# then makes a buffer around it: max(data)*1.1
# then rounds that inflated number to one significant digit:
signif(max(data)*1.1, digits=1)
# then takes the max of that or 0 to allow for positive and negative numbers
axExFact <-1.1
ymax <- max(c(0, signif(max(data)*axExFact, digits=1)))
ymin <- min(c(0, signif(min(data)*axExFact, digits=1)))

# here is the plot
barplot(data, ylim=c(ymin, ymax))

# another example
data2 <- c(10, -15, 52, 11)
ymax2 <- max(c(0, signif(max(data2)*1.1, digits=1)))
ymin2 <- min(c(0, signif(min(data2)*1.1, digits=1)))
barplot(data2, ylim=c(ymin2, ymax2))

# here it is as a function
barplotCovered <- function(data, axExFact, ...){
	ymax <- max(c(0, signif(max(data)*axExFact, digits=1)))
	ymin <- min(c(0, signif(min(data)*axExFact, digits=1)))
	barplot(data, ylim=c(ymin, ymax), ...)

# example using the function
barplotCovered(data, axExFact=1.1, names.arg=c("a", "b", "c", "d"))

Jack Siegrist
Graduate Program in Ecology & Evolution, and Department of Ecology,
Evolution, & Natural Resources,
Rutgers University, New Brunswick, NJ 08901
Jack Siegrist wrote:
> The function barplot automatically creates a y-axis that doesn't
> necessarily cover the range of y-values to be plotted. I know how to
> manually create my own y-axis so that it does cover the range, but I was
> wondering if there is some parameter to change so that the scale of the
> y-axis is automatically taller than the tallest bar.
> I thought setting xpd=F would do it, since it says that xpd determines
> whether bars will be plotted outside of the plotting region, but it had no
> effect, so I guess it must be dealing with something different.
> In the example below, the scale goes to 15 but the second bar goes to 16.
> In this case I would like the scale to go to 20.
> Thanks
> #example data
> data <- c(12, 16)
> #none of the following are any different
> barplot(data)
> barplot(data, xpd=T)
> barplot(data, xpd=F)

View this message in context: http://n4.nabble.com/barplot-y-axis-too-short-tp1459406p1460108.html
Sent from the R help mailing list archive at Nabble.com.

More information about the R-help mailing list