Hello. I am an R newbie struggling to learn and use R . I have read many
portions of the R Reference Manual, as well as the FAQs. Given that I
learn something new each time, I know I might be missing something
obvious. But I appeal to your good nature to help me through this
initial problem.
I have attached a pdf file to demonstrate what I desire and have listed
what my data looks like in Excel (below). Following is the data and
script I developed - which does not provide what I want.
My immediate goal is to create a barplot in R similar to the attached
pdf chart. But I am stuck on several problems. First, I would like to
have 2 labels below the barplot - one label for each bar and one for
each group of bars. Second, I would like to vary color by group (instead
of by bar). I assume that I need to do use some sort of syntax within
the color option but have not yet figured it out. I have made two
different plot attempts -- one resulting in the bars being grouped
appropriately but missing the labels below the x-axis; the other giving
me the individual labels but not grouped as I need.
This is my version information:
platform i386-pc-mingw32
arch i386
os mingw32
system i386, mingw32
status
major 1
minor 9.1
year 2004
month 06
day 21
language R
Thank you in advance for any help you can give me.
...heather
----------------------------------
Spreadsheet data to obtain attached pdf:
Year Group Rate
2002 Alpha 17.6
Beta 13.0
Gamma 8.9
Delta 7.1
Epsilon 6.0
Zeta 5.4
Eta 3.7
Theta 2.5
2003 Beta 11.6
Epsilon 8.7
Zeta 6.4
Theta 3.3
Xi 10.2
Omicron 7.9
2004 Alpha 8.9
Gamma 8.0
Delta 7.7
Episilon 6.9
Eta 6.1
Xi 3.8
Omicron 1.2
----------------------------------
R data set ("sample.dat"):
Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Xi,Omicron
2002,17.6,13.0,8.9,7.1,6.0,5.4,3.7,2.5,0,0
2003,0,11.6,0,0,8.7,6.4,0,3.3,10.2,7.9
2004,8.9,0,8.0,7.7,6.9,0,6.1,0,3.8,1.2
----------------------------------
My R code attempt:
# Read in data
sample <- t(read.table("sample.dat", sep=",", header=T))
# Set color palette
shade <- palette(c("cyan2","yellow","magenta1"))
# Set plot limits:
ymax <- as.integer(max(sample)+1)
# Bar graph (get grouped plot but not grouped color nor individual
labels below)
par(mar=c(6,4,6,4))
barplot(sample, beside=T, xlab="Test and Year", ylab="Rate", font.lab=3,
axis.lty=1, col=shade)
legend(1,1, rownames(sample), xjust=-5.4, yjust=-2, col=shade, lty=1, lwd=2)
title(main="Rate by Test and Year", outer=F, font.main=2, line=3)
# Bar graph (get individual labels below but not grouped by year)
barplot(t(sample), beside=T, xlab="Test and Year", ylab="Rate",
font.lab=3, axis.lty=1, las=2, col=shade)
legend(1,1, colnames(sample), xjust=-6, yjust=-7, col=shade, lty=1, lwd=2)
title(main="Rate by Test and Year", outer=F, font.main=2, line=3)
----------------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sample.pdf
Type: application/pdf
Size: 36182 bytes
Desc: not available
Url : https://stat.ethz.ch/pipermail/r-help/attachments/20041115/ba818ad9/sample.pdf
Barplot difficulties
3 messages · Heather J. Branton, Frank E Harrell Jr, Marc Schwartz
Heather J. Branton wrote:
Hello. I am an R newbie struggling to learn and use R . I have read many portions of the R Reference Manual, as well as the FAQs. Given that I learn something new each time, I know I might be missing something obvious. But I appeal to your good nature to help me through this initial problem. I have attached a pdf file to demonstrate what I desire and have listed what my data looks like in Excel (below). Following is the data and script I developed - which does not provide what I want.
.... Dear Heather - Please read Bill Cleveland's book The Elements of Graphing Data. A MUCH better plot can be produced. And let time be one of the first variables to vary.
Frank E Harrell Jr Professor and Chair School of Medicine
Department of Biostatistics Vanderbilt University
On Mon, 2004-11-15 at 19:03 -0500, Heather J. Branton wrote:
Hello. I am an R newbie struggling to learn and use R . I have read many portions of the R Reference Manual, as well as the FAQs. Given that I learn something new each time, I know I might be missing something obvious. But I appeal to your good nature to help me through this initial problem. I have attached a pdf file to demonstrate what I desire and have listed what my data looks like in Excel (below). Following is the data and script I developed - which does not provide what I want. My immediate goal is to create a barplot in R similar to the attached pdf chart. But I am stuck on several problems. First, I would like to have 2 labels below the barplot - one label for each bar and one for each group of bars. Second, I would like to vary color by group (instead of by bar). I assume that I need to do use some sort of syntax within the color option but have not yet figured it out. I have made two different plot attempts -- one resulting in the bars being grouped appropriately but missing the labels below the x-axis; the other giving me the individual labels but not grouped as I need.
<snip>
How about something like this:
# Don't use 'sample' for the name here, as sample() is a function
MyData <- t(read.table("sample.dat", sep= "," , header = TRUE))
# These may be closer to the PDF chart colors
# You need to repeat them to color each group the same, rather
# than alternating bar colors
MyCols <- rep(c("lightcyan","cornsilk","lavender"), each = 10)
# adjust the margins
par(mar = c(7, 5, 6, 4))
# Now do the barplot:
# Note barplot() returns the bar midpoints in 'mp'
# use 'names.arg' for the individual bar names from MyData
# set 'las = 2' for vertical labels
# set 'ylim' to c(0, 20) for the y axis range
# set 'yaxt = "n"' to not draw the y axis tick marks
mp <- barplot(MyData, beside = TRUE, col = MyCols,
main = "Rate by Group and Year",
ylab = "Rate",
names.arg = rep(rownames(MyData), 3), las = 2,
cex.names = 0.75, ylim = c(0,20), yaxt = "n")
# Now set up the y axis tick marks and labels
ticks <- seq(0, 20, 2)
axis(2, at = ticks, las = 1,
labels = formatC(ticks, format = "f", digits = 1))
# Draw a box around the whole thing
box()
# Now draw the years. Note from ?barplot that colMeans(mp) are
# the group midpoints
mtext(side = 1, at = colMeans(mp), line = 3.5, text = colnames(MyData))
# Now draw the x axis label
mtext(side = 1, line = 5.5, text = "Test and Year")
Hope that gets you what you need. You can adjust the font sizes, etc. as
you require.
Note that unlike Excel, the 0 (zero) columns are not dropped. :-)
HTH,
Marc Schwartz