Hi Luigi
Not sure what you want exactly.
I have cleaned up the formula - do that at the data.frame first.
see http://lmdvr.r-forge.r-project.org/figures/figures.html for more
examples on lattice
Please dput your data - makes things easier and we have what you are working
with
There may be better ways of doing this but try
dat <-
structure(list(patient = c("A264", "A264", "A264",
"A264", "A264",
"A264", "A264", "H041", "H041",
"H041", "H041", "H041", "H041",
"H041", "A263", "A263", "A263",
"A263", "A263", "A263", "A263",
"N241", "N241", "N241", "N241",
"N241", "N241", "N241"), TB = c("A",
"A", "A", "A", "A", "A",
"A", "L", "L", "L", "L",
"L", "L", "L",
"A", "A", "A", "A", "A",
"A", "A", "A", "A", "A",
"A", "A", "A",
"A"), gene = c("IP10", "IP10", "IP10",
"IP10", "IP10", "IP10",
"IP10", "IP10", "IP10", "IP10",
"IP10", "IP10", "IP10", "IP10",
"IP10", "IP10", "IP10", "IP10",
"IP10", "IP10", "IP10", "IP10",
"IP10", "IP10", "IP10", "IP10",
"IP10", "IP10"), stimulus = structure(c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L,
4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("ESAT6",
"CFP10", "Rv3615c", "Rv2654", "Rv3879",
"Rv3873", "PHA"), class = "factor"),
ratio = c(250.9, 399.1, 959.4, 1.994, 589.2, 5.366, 48.27,
10.32, NA, 3.33, NA, 1, NA, 1, 509.5, 991, 689.6, 1285, 683.7,
468.7, 47.08, 8.534, 2.733, NA, 11.18, 10.41, 0.7532, NA)), .Names
c("patient",
"TB", "gene", "stimulus", "ratio"),
row.names = c(NA, -28L), class "data.frame")
#dat$stimulus = factor(dat$stimulus, levels
c("ESAT6","CFP10","Rv3615c", "Rv2654",
"Rv3879","Rv3873","PHA"))
datav <- aggregate(ratio ~ TB, dat, mean, na.rm = T)
datme <- aggregate(ratio ~ TB, dat, median, na.rm = T)
datavA <- aggregate(ratio ~ TB+stimulus, dat, mean, na.rm = T)
datmeA <- aggregate(ratio ~ TB+stimulus, dat, median, na.rm = T)
stripplot(ratio ~ TB|stimulus, dat,
hor=F,
as.table = TRUE,
layout = c(7,1),
scales = list(relation = "same"),
ylab=expression(bold("Ratio GOI/RG")),
xlab=expression(bold("Antigen stimulation")),
main="IP10 expression",
pch=19,
col=c("red","black"),
par.settings = list(strip.background=list(col="white"),
superpose.symbol = list(col
c("red","black"),
pch = c(1,20))) ,
par.strip.text=list(font=2),
panel = function(x, y, ...){
pnl = panel.number()
# mean
panel.abline(h =
datavA[datavA[,2]=levels(datavA[,2])[pnl],"ratio"], col =
c("red","black"))
# median
panel.abline(h =
datmeA[datmeA[,2]=levels(datmeA[,2])[pnl],"ratio"], col =
c("red","black"), lty=3)
panel.stripplot(x,y, ...)
}
)
stripplot(ratio ~ TB|stimulus, dat,
hor=F,
as.table = TRUE,
layout = c(7,1),
scales = list(relation = "same"),
ylab=expression(bold("Ratio GOI/RG")),
xlab=expression(bold("Antigen stimulation")),
main="IP10 expression",
pch=19,
col=c("red","black"),
par.settings = list(strip.background=list(col="white"),
superpose.symbol = list(col
c("red","black"),
pch = c(1,20))) ,
par.strip.text=list(font=2),
panel = function(x,y,...){
panel.abline(h = datav[,2], col = c("red",
"black"),lty=1)
panel.abline(h = datme[,2], col = c("red",
"black"),lty=3)
panel.stripplot(x,y, ...)
}
)
Regards
Duncan
Duncan Mackay
Department of Agronomy and Soil Science
University of New England
Armidale NSW 2351
Email: home: mackay at northnet.com.au
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On
Behalf Of Luigi Marongiu
Sent: Friday, 24 January 2014 06:55
To: r-help at r-project.org
Subject: [R] add median/mean line to stri-plot in lattice
dear all,
I set a series of variable subdivided in classes (there are 7 in here,
defined by the clause 'levels'), and I am showing the results in strip
chart using the package 'lattice'. Whitin each class the samples are
further subdivided in "active" (A) and "latent" (L). The
function I have
written is:
stripplot(my.data.IP10$ratio ~
factor(my.data.IP10$TB)|factor(my.data.IP10$stimulus,
levels = c("ESAT6","CFP10","Rv3615c",
"Rv2654", "Rv3879",
"Rv3873","PHA")),
my.data, hor=F, layout = c(7,1), scales = list(relation = "same"),
ylab=expression(bold("Ratio GOI/RG")),
xlab=expression(bold("Antigen
stimulation")), main="IP10 expression", pch=19,
col="black",
par.settings = list(strip.background=list(col="white")),
par.strip.text=list(font=2))
which defines the figure attached "IP10".
Providing the median or average values (that will depend on the
distribution of the final data), is there a way to add a line overlapping
each of these classes and subclasses? I reckon it will be a vector of 14
elements, which can be called "Mvect".
In addition is there a way to differently colour the subclasses? lest say
black for active and white for latent? I tried with 'group' but with not
success.
Thank you for any help, I am not quite familiar with the Latex codes. I am
also attaching the dataframe containing the data for further reference.
Best regards
Luigi