mamboSC4649
mamboSC4649

Reputation: 75

midpoints returned by barplot function do not actually line up with midpoints of bars

I've been noticing that if I save a barplot object:

y <- seq(10,50,10)
mp <- barplot(y)

and overlay a line

par(new=T)
plot(mp, y, type="o")

then the points on the new plot do not line up with the middle of the bars in the bar plot.

However, if I don't use par(new=T) and instead do this:

mp <- barplot(y)
lines(mp, y)
points(mp,y)

then the points line up with the middle of the bars.

I want to plot the new line plot on a second axis, so I'd need to do something like par(new=T). Does anyone know how to have the midpoints line up properly?

Thanks

Upvotes: 2

Views: 1687

Answers (1)

CHP
CHP

Reputation: 17189

After brief investigation, I realized that the problem is that the x-axis of the two plots don't match up. See the code & plot below to see the problem.

y <- seq(10, 50, 10)
mp <- barplot(y)
axis(1)  #barplot will use left and bottom axes

par(new = T)

plot(mp, y * 4, type = "o", axes = F)
axis(4)
axis(3)  # this plot will use top and right axes

enter image description here

So to fix this problem, you need to specify common xlim parameter for both plots.

mp <- barplot(y, xlim = c(0, length(y) + 1))
par(new = T)
plot(mp,y*4,type='o', axes = F,ylab="", xlim=c(0,length(y)+1) ) + axis(4) + mtext("y*4",4)

enter image description here

Upvotes: 2

Related Questions