Hi Luigi

 

If you create a numeric variable of 1:5 to correspond as the x's - Normal,
Borderline, . 

You could then plot the points as an xyplot -xyplot gives you more
flexibility to do things.

then add the lines as segments in a panel function

Use scales for the labels as

scales = list(x = list(at = 1:5, labels = c("Normal","Borderline", .))),

 

Regards

 

Duncan

                            

 

From: Luigi Marongiu [mailto:marongiu.luigi@gmail.com] 
Sent: Saturday, 25 January 2014 00:45
To: Duncan Mackay
Subject: Re: [R] add median/mean line to stri-plot in lattice

 

Dear Duncan, 

sorry for the data, it was a bit too bulky to simply put it here as a table,
although you recreated it very good.

What i would like to do is something similar to the figure attached, which
was done with the normal strip chart. For each group there is the line
indicating the median value. 

In the query I had the data is more complex and therefore "lattice" was a
better choice, but the syntax is very difficult, in fact you had to
implement a function whithin the function stripplot.

Essentially there should be a short line overlapping each data set
representing the median (or average) values. Probably it will be a matter of
changing panel.abline, but I don't know how. 

Thank you very much for your help

Luigi

 

 

On Thu, Jan 23, 2014 at 11:45 PM, Duncan Mackay <dulcalma@bigpond.com>
wrote:

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@northnet.com.au





-----Original Message-----
From: r-help-bounces@r-project.org [mailto:r-help-bounces@r-project.org] On
Behalf Of Luigi Marongiu
Sent: Friday, 24 January 2014 06:55
To: r-help@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

 


	[[alternative HTML version deleted]]


