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)