[R] dotplots with error bars
Jim Lemon
jim at bitwrit.com.au
Thu Feb 16 11:56:43 CET 2012
On 02/16/2012 05:22 AM, Colin Wahl wrote:
> Thank you,
> Its looking like your package will work for me. I have two questions.
>
> First, how do I rotate the plot 90 degrees so the group labels are on
> the x axis and the response value on the y axis?
>
> Second, I'm having trouble with the group labels. I need to order my
> groups into meaningful groups to properly display my data. I used the
> sort.segs=FALSE argument expecting it to plot the values in the order
> of data in the plant_height matrix.
>
> centipede.plot(t(plant_height[,c(3,2,4)]),
> panel.first=c(abline(h=1: 13 , col="lightgray", lty=2),
> abline(v=mean(plant_height$est), col="lightgray")),
> sort.segs=FALSE,
> left.labels=plant_height$group, bg="green",
> right.labels=rep("", 13), xlab="Mean plant height (cm) +- SE")
>
> Not only are the groups not plotted in the order as they appear in the
> matrix, but the labels are incorrect. The labels cycle through CA-I,
> CAIII, CA-II, in that order.
>
> The plot file is attached.
>
Hi Colin,
First, I'm mildly amazed that centipede.plot will accept embedded
function commands like lattice graphics. Unsorted groups are plotted
starting from the bottom of the plot, so when I call centipede.plot like
this:
centipede.plot(t(plant_height[,c(3,2,4)]),sort.segs=FALSE,
left.labels=plant_height$group, bg="green",
hgrid=1:13,vgrid=mean(plant_height$est),
right.labels=rep("", 13),
xlab="Mean plant height (cm) +- SE")
I get what I would expect, except for the fact that in modifying the
function, I got the wrong dimension of the "segs" matrix to order the
left.labels, thus the repeating labels. I have fixed that particular bug
and attached the line that fixes the bug for you. I'll wrap up a new
package to fix this for others who may use it.
The big problem is that you want an entirely different plot if you turn
it sideways. What you want in that case is probably:
plot(1:13,plant_height$est,xaxt="n",xlab="Groups",type="n",
ylab="Mean plant height (cm) +- SE",ylim=c(0,20),
main="Plant height by group")
abline(v=1:13,col="lightgray",lty=2)
abline(h=mean(plant_height$est),col="lightgray")
points(1:13,plant_height$est,pch=21,bg="green")
dispersion(1:13,plant_height$est,plant_height$upper,plant_height$lower,
intervals=FALSE)
staxlab(1,at=1:13,labels=plant_height$group)
To fix the label bug, replace this line:
else seg.order<-1:segdim[1]
with this:
else seg.order<-1:segdim[2]
Now that's better.
Jim
More information about the R-help
mailing list