[R] set axis limit in lattice

Luigi Marongiu marongiu.luigi at gmail.com
Tue Apr 29 19:57:52 CEST 2014


Dear all,

I would like to set the axis of a figure using the max() so to have
more control on the limits of the axis -- this because in the actual
case more independent figures are generated from the same dataframe
and these must have the same axis scale.

Since the figure is generated using lattice device, the syntax is too
complicated for me: when I place the xlim=c(0,Y) in the arguments —
where Y is obtained using max(data) — there is no result. In basic R
this argument would work virtually in any position.

Any tip?

Best regards

Luigi

 ####CODE
### open plot library
library(lattice)
my.data<-structure(list(
   column_1 = 1:120,
   column_2 = structure(c(
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8,
 1,2,3,4,5,6,7,8), .Label = c("Unst.", "ESAT6", "CFP10", "Rv3615c",
"Rv2654", "Rv3879", "Rv3873", "PHA"), class = "factor"),
 column_3 = structure(c(
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0)),
     column_4 = c(
 192.0519108,183.6403531,53.46798757,83.60638077,69.60749873,159.4706861,256.8765622,499.2899303,
 2170.799076,1411.349719,2759.472348,2098.973397,2164.739515,1288.676574,1611.486543,6205.229575,
 870.7424981,465.9967135,191.8962375,864.0937485,2962.693675,1289.259137,2418.651212,7345.712517,
 0,168.1198893,674.4342961,101.1575401,47.81596237,0,0,1420.793922,
 142.6871331,5.466468742,291.9564635,80.73914133,73.02239621,64.47806871,144.3543635,3167.959757,
 3164.748333,1092.634557,28733.20269,1207.87783,729.6090973,151.8706088,241.2466141,9600.963594,
 1411.718287,12569.96285,1143.254476,6317.378481,16542.27718,79.68025792,1958.495138,7224.503437,
 208.4382941,69.48609769,656.691151,0.499017582,7114.910926,187.6296174,41.73980805,8930.784541,
 4.276752185,0.432300363,60.89228665,1.103924786,0.490686366,1.812993239,7.264531581,1518.610307,
 2172.051528,595.8513744,17141.84336,589.6565971,1340.287628,117.350942,593.7034054,24043.61463,
 0,81.83292179,1539.864321,36.41722958,8.385131047,161.7647376,65.21615696,7265.573875,
 97.84753179,154.051827,0.613835842,10.06138851,45.04879285,176.8284258,18795.75462,30676.769,
 5780.34957,944.2200834,2398.235596,1083.393165,2541.714557,1251.670895,1547.178549,1792.679176,
 3067.988416,8117.210173,23676.02226,8251.937547,17360.80494,18563.61561,16941.865,31453.96708,
 2767.493803,4796.33016,12292.93705,3864.657567,9380.673835,14886.44683,8457.88646,26050.47191)),
.Names = c("row", "stimulation", "positivity", "copy"), row.names =
c(NA, -120L),
 class = "data.frame")

key.plot<-list(
  space="top", columns=2,
  text=list(c("Positive", "Negative"), col="black"),
  points=list(pch=c(16,1), col="black"))

datmeA <- aggregate(copy ~ positivity+stimulation, my.data, median, na.rm = T)

X<-c(0.7, 1.3, 1.7, 2.3)

Y<-max(copy)

stripplot(
  copy ~ factor(positivity)|factor(stimulation, levels = c("Unst.",
"ESAT6","CFP10","Rv3615c", "Rv2654","Rv3879", "Rv3873","PHA")),
       my.data,
       group = positivity,
       hor=F,
       layout = c(8,1),
       scales = list(x = list(at = c(1,2), labels = c("N","P"))),
       jitter.data=TRUE, pch=c(16,1), col="black",
       ylab=expression(bold("Copy")),
       xlab=expression(bold("Stimulation")),
       main="Plot",
       par.settings = list(strip.background=list(col="white")),
       par.strip.text=list(font=2),
       key = key.plot,
       panel = function(x, y, ...)
  {
            pnl = panel.number()
  k<-0
  for (i in 1:2){
   datme<-subset(datmeA, positivity==i-1)
             w<-i+k
                   panel.segments(x0 = X[w], y0 =  datme[datme[,2]==
levels(datme[,2])[pnl],"copy"],
                                  x1 = X[w+1],  y1 = datme[datme[,2]==
levels(datme[,2])[pnl],"copy"],lwd = 2, col = "black")
                  k=k+1

      panel.stripplot(x,y, ...)
   }
             }
       )



More information about the R-help mailing list