An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20101201/962ed104/attachment.pl>
Lattice dotplots
3 messages · barbara.chaves at bayer.com, Peter Ehlers, Dieter Menne
On 2010-12-01 04:02, barbara.chaves at bayer.com wrote:
Dear, I have a dataset with 4 subjects (see ID in example), and 4 treatment (see TRT in example) which are tested on 2 locations and in 3 blocs. By using Lattice dotplot, I made a graph that shows the raw data per location and per bloc. In that graph, I would like to have a reference line per bloc that refers to the first treatment (T1). However, I can not find how to do that. I can make a dotplot with a reference line which is the average of all treatments (see 2) in example). Under 3), I used the code "panel.abline (v=mean(x [y=="E"& TRT =="T1"],na.rm=TRUE),col="green", lty=2)" by which I hoped to set the reference line at 'T1', but than I get the error that 'object TRT is missing'. Does anybody know a solution?
Try this (I've stripped out the unnecessary stuff; what
is it about *minimal* that seems to elude people?):
p <- dotplot (ID ~ OUT | as.factor(BLOC) * LOC,
data=dataset,pch=c(19,4,17,15),ylab="",xlab="OUT",
fill.color = dataset$COL,
TRT = dataset$TRT,
panel = function(x, y, fill.color, TRT, ..., subscripts) {
fill <- fill.color [subscripts]
panel.dotplot(x, y, col = fill, ...)
panel.abline (v=mean(x[y=="A" & TRT =="T1"], na.rm=TRUE),
col="green", lty=2)
}
)
print(p)
Peter Ehlers
Thanks in advance!
regards,
Barbara
EXAMPLE:
--------
library(lattice)
# 1) example dataset
#-----------------
dataset<- expand.grid (LOC=c("LOC1", "LOC2"),
BLOC=c(1,2,3),
ID=c("A", "B", "C", "D",
"E"),
TRT=c("T1", "T2", "T3",
"T4"))
dataset$COL<- ifelse(dataset$TRT == "T1", "green",
ifelse(dataset$TRT == "T2", "blue"
,
ifelse(dataset$TRT
== "T3","orange","red")))
dataset$ID.TRT<- as.factor(paste(dataset$ID,dataset$TRT,sep="."))
dataset$OUT<- sample(50:60, 120, replace=TRUE)
#edit(dataset)
dataset<- dataset[order(dataset$LOC,dataset$BLOC,dataset$ID), ]
# 2) dotplot with reference line that is average of all treatments
#------------------------------------------------------------------
dotplot (ID ~ OUT | as.factor(BLOC) * LOC,
data=dataset,pch=c(19,4,17,15),ylab="",xlab="OUT",
scales=list(alternating=FALSE,cex=0.6),
fill.color = dataset$COL,
panel = function(x, y, fill.color, ..., subscripts) {
fill<- fill.color [subscripts]
panel.dotplot(x, y, col = fill, ...)
panel.abline (v=mean(x [y=="E"],na.rm=TRUE),col=
"green", lty=2)
},
main = "Raw OUT Data",
key = list( space ="bottom",
columns=2,
cex=0.8,
pch=19,
border=TRUE,
text= list(c("T1","T2","T3","T4")),
points = list(col=c("green","blue",
"Orange","Red"),pch=c(19,4,17,15))))
# 3) dotplot with error in reference line because 'TRT is missing'
#----------------------------------------------------------------
dotplot (ID ~ OUT | as.factor(BLOC) * LOC,
data=dataset,pch=c(19,4,17,15),ylab="",xlab="OUT",
scales=list(alternating=FALSE,cex=0.6),
fill.color = dataset$COL,
panel = function(x, y, fill.color,ID.TRT, ..., subscripts)
{
fill<- fill.color [subscripts]
panel.dotplot(x, y, col = fill, ...)
panel.abline (v=mean(x [y=="E"& TRT =="T1"]
,na.rm=TRUE),col="green", lty=2)
},
main = "Raw OUT Data",
key = list( space ="bottom",
columns=2,
cex=0.8,
pch=19,
border=TRUE,
text= list(c("T1","T2","T3","T4")),
points = list(col=c("green","blue",
"Orange","Red"),pch=c(19,4,17,15))))
________________________________________________________________________
The information contained in this e-mail is for the excl...{{dropped:14}}
______________________________________________
R-help at r-project.org 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.
barbara.chaves wrote:
I have a dataset with 4 subjects (see ID in example), and 4 treatment (see TRT in example) which are tested on 2 locations and in 3 blocs. By using Lattice dotplot, I made a graph that shows the raw data per location and per bloc. In that graph, I would like to have a reference line per bloc that refers to the first treatment (T1). However, I can not find how to do that. ...
Thanks a lot for the nice self-contained example which certainly has cost
you some time. A bit of nitpicking: You could have improved it a little by
removing decorative stuff and using a lower degree of indentation to avoid
ugly line breaks in email.
You were close by, but I believe that you ran into the trap of believing
that the dot in ID.TRT is something special in variable names as it is in c
or Pascal. The dot in names has sometimes a meaning for functions (try
methods("print")) but it is not possible to "get a part of it" in panel.dot.
The workaround is simple: pass TRT, not ID.TRT. Everything else was fine,
some minor modifications were added.
Dieter
# Begin code
dataset <- expand.grid (
LOC=c("LOC1", "LOC2"),
# Better make it a factor immediately to avoid surprises later
BLOC=as.factor(c(1,2,3)),
ID=c("A", "B", "C", "D","E"),
TRT=c("T1", "T2", "T3","T4"))
# replaced nested ifelse
dataset$COL <- factor(dataset$TRT,labels=c("green", "blue","orange","red"))
dataset$ID.TRT <- as.factor(paste(dataset$ID,dataset$TRT,sep="."))
dataset$OUT <- sample(50:60, 120, replace=TRUE)
# removed "as.factor". Corrected TRT
dotplot (ID ~ OUT | BLOC * LOC,
data=dataset,pch=c(19,4,17,15),
TRT = dataset$TRT,
fill.color = dataset$COL,
panel = function(x, y, TRT, ..., subscripts)
{
panel.dotplot(x, y,fill=fill.color, ...)
panel.abline (v=mean(x [y=="E" & TRT =="T1"],na.rm=TRUE),col="green",
lty=2)
})
View this message in context: http://r.789695.n4.nabble.com/Lattice-dotplots-tp3067130p3067382.html Sent from the R help mailing list archive at Nabble.com.