52

Usually when I plot some R line plot and set ylim=c(0,some_value), there is small space between the x axis and y=0.

I would like the y axis to show exactly at y=0 so points (x,0) will be plotted on the y axis (and not above).

David B
  • 29,258
  • 50
  • 133
  • 186

2 Answers2

64

You probably want the graphical parameters xaxs and yaxs with style "i":

plot(1:10, rnorm(10), ylim=c(0,10), yaxs="i")

See ?par:

xaxs: The style of axis interval calculation to be used for the x-axis. Possible values are "r", "i", "e", "s", "d". The styles are generally controlled by the range of data or xlim, if given. Style "r" (regular) first extends the data range by 4 percent at each end and then finds an axis with pretty labels that fits within the extended range. Style "i" (internal) just finds an axis with pretty labels that fits within the original data range. Style "s" (standard) finds an axis with pretty labels within which the original data range fits. Style "e" (extended) is like style "s", except that it is also ensures that there is room for plotting symbols within the bounding box. Style "d" (direct) specifies that the current axis should be used on subsequent plots. (Only "r" and "i" styles are currently implemented)

yaxs: The style of axis interval calculation to be used for the y-axis. See xaxs above.

rcs
  • 67,191
  • 22
  • 172
  • 153
  • Note that, quote: "Only "r" and "i" styles have been implemented in R." I guess this means that "e", "s", and "d" are available in S only (what else could it mean?) Anyhow, unfortunately, these other ones are not available in R. – PatrickT Mar 18 '13 at 06:56
16

Another option is to disable the axis plotting in plot using axes=F and then put the axes in separately using the axis command, with the pos option controlling the axis spacing.

plot(1:10, runif(10), ylim=c(0,1), xlim=c(0,10),axes=F)
     axis(1, pos=0)
     axis(2, pos=0)   
WetlabStudent
  • 2,556
  • 3
  • 25
  • 39