Alan H.
Alan H.

Reputation: 263

Extending the scale of an axis

I have generated the following histogram in R:

Histogram

I generated it using this hist() call:

hist(x[,1], xlab='t* (Transition Statistic)',
     ylab='Proportion of Resamples (n = 10,000)',
     main='Distribution of Resamples', col='lightblue',
     prob=TRUE, ylim=c(0.00,0.05),xlim=c(1725,max(x[,1])+10))

Plus the following abline():

abline(v=1728,col=4,lty=1,lwd=2)

That vertical line indicates the actual location of a test statistic, which I am comparing to the results of permutation samples.

My question is this: as you can see, the x scale does not extend back to the vertical line. I would really like it to do so, because I think it looks odd otherwise. How can I make this happen?

I have already tried the xaxs="i" parameter, which has no effect. I have also tried making my own axis with axis() but this requires making both axes again from scratch, and the results don't look that great to me. So, I suspect there must be an easier way to do this. Is there? And, if not, can anyone suggest what axis() command might work well, assuming I want everything to look basically the same, but with the longer x scale?

Upvotes: 2

Views: 4415

Answers (2)

Henry
Henry

Reputation: 6784

Since R is using gaps of 20 for the x-axis here, you can get the extension you want using 1720 rather than 1725 for the lower limit , i.e. with xlim=c(1720,max(x[,1])+10) which would produce something like

enter image description here

Upvotes: 6

Gavin Simpson
Gavin Simpson

Reputation: 174778

The usual R plot draws a frame around the plot. To add this, do:

box()

after the plot.

If that isn't what you want, you need to suppress axis plotting and then add your own later.

hist(...., axes = FALSE) ## .... is where your other args go
axis(side = 2)
axis(side = 1, at = seq(1730, 1830, by = 20))

That won't go quite to the vertical line but may be close enough. If you want a tick at the vertical line, choose different tick marks, e.g.

axis(side = 1, at = seq(1725, 1835, by = 20))

Upvotes: 7

Related Questions