Re: [R] barplot x-axis problem

From: Lauri Nikkinen <lauri.nikkinen_at_iki.fi>
Date: Fri 26 Jan 2007 - 08:28:27 GMT

Thank you very much, Marc! That was exactly the solution I was looking for!

Regards,
Lauri

2007/1/26, Marc Schwartz <marc_schwartz@comcast.net>:
>
> On Thu, 2007-01-25 at 22:23 +0200, Lauri Nikkinen wrote:
> > Hi R-users,
> >
> > I'm new to R and I'm trying to make a barplot combined with two lines
> > (refering to secondary y-axis). Bars should represent the number of
> > transfused patients by age class and sex and lines should represent
> > the amount of blood units given in age classes. I have now successfully
> made
> > a barplot and used par(new=TRUE) to plot another empty graph at the top
> of
> > the barplot.
> >
> > #tab-table:
> > # ikar_new
> > #sp 0-9 10-19 20-29 30-39 40-49 50-59 60-69 70-79 >80
> > # mies 227 93 79 92 195 451 560 577 132
> > # nainen 183 80 102 175 99 161 230 357 164
> >
> > barplot(tab,
> > beside=TRUE,
> > col = c("black", "lightgrey"),
> > legend = rownames(tab),
> > ylim= c(0,800),
> > font.main = 4,
> > cex.names = 1.1,
> > main = "Transfused patients and trombocytes given by age and
> sex",
> > ylab="Number of transfused patients",
> > xlab="Age groups (years)")
> >
> > axis(1, c(0,3.5+3*0:9), labels=FALSE, tick=TRUE)
> >
> > par(new=TRUE)
> >
> > #temp-table
> > # ikar_new mies nainen
> > #1 0-9 2296 2224
> > #2 10-19 1648 3508
> > #3 20-29 2276 1464
> > #4 30-39 1920 2600
> > #5 40-49 3912 2020
> > #6 50-59 6856 2872
> > #7 60-69 8748 3592
> > #8 70-79 7052 4916
> > #9 >80 1436 1780
> >
> >
> > plot(temp$mies, type="n", yaxt='n', xaxt='n', ann=FALSE)
> > lines(temp$mies, col="blue", lwd=2)
> > lines(temp$nainen, col="red", lwd=2)
> > axis(4, at=NULL)
> >
> > I have used lines() to draw the lines into the picture. How can I get
> the
> > lines into the same x-axis and get the actual data points of the lines
> to
> > be exactly in between the two barplot's bars (categories in x-axis)? Now
> the
> > points which the lines connect are not in the middle of the groups in
> x-axis
> > as I would want them to be. The bars in the barplot are not stacked. I'm
> > sorry that I'm not able to give you the scripts to make those tables.
>
> I suspect that this is what you might require:
>
>
> # Get the maximum value for both sets of data
> # divide the second set by 10 to normalize to the
> # range of the first set
>
> Max.y <- max(tab, as.matrix(temp[, -1]) / 10)
>
>
> # Now do the barplot using c(0, Max.y) for ylim
> # Also save the bar midpoints in 'mp'
> # See ?barplot
>
> mp <- barplot(tab, beside=TRUE,
> col = c("black", "lightgrey"),
> legend = rownames(tab),
> ylim = c(0, Max.y),
> font.main = 4,
> cex.names = 1.1,
> main = "Transfused patients and trombocytes given by age and
> sex",
> ylab ="Number of transfused patients",
> xlab ="Age groups (years)")
>
> axis(1, c(0, 3.5 + 3 * 0:9), labels = FALSE, tick = TRUE)
>
>
> # Now add the lines, dividing the y values by 10
> # to fit the y axis range to the first set of data
> # Use colMeans(mp) for the x axis values, which will
> # give the midpoints of each bar pair
>
> lines(colMeans(mp), temp$mies / 10, col = "blue", lwd = 2)
> lines(colMeans(mp), temp$nainen / 10, col = "red", lwd = 2)
>
>
> # Now set the values for the right hand axis
>
> at <- seq(0, 800, 200)
>
>
> # Set the axis labels to y at * 10
>
> axis(4, at = at, labels = at * 10)
>
>
> There are multiple ways to accomplish drawing two sets of data with
> differing ranges on the same plot. Typically they involve the
> normalization of the data to common ranges and then adjustment of the
> axis labelling accordingly.
>
> HTH,
>
> Marc Schwartz
>
>
>

        [[alternative HTML version deleted]]



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Fri Jan 26 19:34:01 2007

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Fri 26 Jan 2007 - 09:30:29 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.