Thank you very much, Marc! That was exactly the solution I was looking for!
Regards, Lauri 2007/1/26, Marc Schwartz <[EMAIL PROTECTED]>: > > 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.