[R] Barplot+Table

gunksta andy.choens at gmail.com
Wed Sep 23 22:00:28 CEST 2009



Marc Schwartz-3 wrote:
> 
> Using the data that is in the online plot rather than the above, here  
> is a first go. Note that I am not drawing the background grid in the  
> barplot or the lines for table below it. These could be added if you  
> really need them.
> 

Note: I snipped out the syntax from Marc's earlier answer because it is very
lengthy. At the end of this email I have appended an edited version of his
syntax. The part that I have added is clearly marked. This syntax runs
without "error" but the output is clearly not lined up.

Marc's original syntax works great, as long as X11() is left to it's default
dimensions (square). Unfortunately, after working with my report, I realized
that I need to make the barplot shorter and longer, rather than square. When
I try to change the shape of the output, I start running into problems. 

After looking through the documentation, it seemed as though X11() would
help me. I tried adding this to Marc's original syntax.

X11(height=3, width=4.5, pointsize=10)

Thus, things looked more like this:
X11(height=3, width=4.5, pointsize=10)
mp <- barplot(MyData, beside = TRUE, ylim = c(0, 100),
               yaxt = "n", cex.names = MyCex, col = MyCols)

Unfortunately, this results in two problems.

1) Because I have now changed the shape of the output area, the additional
text and labels are no longer shown on the plot. The barplot itself looks
great, but the labels do not.

2) I seem to be starting two separate X11() displays, although I only want
to start one.

The following syntax demonstrates what I am playing with right now. I
understand that the syntax no longer works because the labels are falling
outside of the shape set by X11(). Unfortunately, I haven't been able to
figure out how to fix it. If posible, I'd like to move the barplot to the
right, to give me more room to print out the labels, but I don't see how
this is possible.

# --------------------------------------------------
# Create  data   
MyData <- matrix(c(57.1,52.3,13.5,13.9,7.9,8.8,5.4,5.6,16.1,19.4), nrow=2)                                                                                                               
                                                                                                                                          
colnames(MyData) <- c("0 times", "1-2 times", "3-5 times", "6-9 Occasions",
"10 or more\nOccasions")  

rownames(MyData) <- c("Androscoggin", "Maine")
          
# Set graph margins to make room for labels
par(mar = c(5, 8, 4, 1))

# Set colors
MyCols <- c("black", "grey80")

# Set label size
MyCex = 0.75

# Set lines for table data
MyLines <- 2:3

# This is the part that I added.
# And it seems to mess things up, although I do want the basic shape.
# Is there a better way to get this shape?
X11(height=3, width=4.5, pointsize=10)

# do barplot, getting bar midpoints in 'mp'
mp <- barplot(MyData, beside = TRUE, ylim = c(0, 100), yaxt = "n", cex.names
= MyCex, col = MyCols)

# Put a box around it
box()

# Draw y axis tick marks and labels
axis(2, at = seq(0, 100, 10), las = 1)

# Draw values below plot
mtext(side = 1, text = MyData,
       at = rep(colMeans(mp), each = nrow(MyData)),
       line = MyLines, cex = MyCex)

# Get min value for the x axis. See ?par 'usr'
min.x <- par("usr")[1]

# Draw categories using mtext
mtext(side = 1, line = MyLines, text = rownames(MyData),
       at = min.x - max(strwidth(rownames(MyData), cex = MyCex)),
       adj = 0, cex = MyCex)

# Draw the colored boxes
VertOff <- strheight("X", cex = MyCex) * c(6, 8)
HorizOff <- min.x - (0.85 * max(strwidth(rownames(MyData))))

# I'm sure these still exist, but they are now being drawn "off-screen"
points(rep(HorizOff, nrow(MyData)), par("usr")[3] - VertOff, bg = MyCols,
pch = 22, xpd = TRUE, cex = MyCex) 

-- 
View this message in context: http://www.nabble.com/Barplot%2BTable-tp25406046p25531279.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list