Re: [R] barplot x-axis problem

2007-01-26 Thread Lauri Nikkinen
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   227937992   195   451   560   577 132
  #  nainen 18380   102   17599   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
  #210-19 1648   3508
  #320-29 2276   1464
  #430-39 1920   2600
  #540-49 3912   2020
  #650-59 6856   2872
  #760-69 8748   3592
  #870-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.


[R] barplot x-axis problem

2007-01-25 Thread Lauri Nikkinen
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   227937992   195   451   560   577 132
#  nainen 18380   102   17599   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
#210-19 1648   3508
#320-29 2276   1464
#430-39 1920   2600
#540-49 3912   2020
#650-59 6856   2872
#760-69 8748   3592
#870-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.

Thanks in advance
Lauri Nikkinen
Lahti, Finland

[[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.


Re: [R] barplot x-axis problem

2007-01-25 Thread Marc Schwartz
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   227937992   195   451   560   577 132
 #  nainen 18380   102   17599   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
 #210-19 1648   3508
 #320-29 2276   1464
 #430-39 1920   2600
 #540-49 3912   2020
 #650-59 6856   2872
 #760-69 8748   3592
 #870-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

__
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.