[R] high density plots using lattice dotplot()

Duncan Mackay dulcalma at bigpond.com
Wed Apr 22 07:46:25 CEST 2015


Hi Luigi

I should have made up an example to make things easier when I replied today

This should get you going

set.seed(1)

PLATE <-
data.frame(Delta.Rn = rnorm(500),
           Cycle = rnorm(500),
           Well  = rep(1:50, each = 10))
head(PLATE)

xyplot(Delta.Rn ~ Cycle | Well,
         data = PLATE,
         groups = Well,
         ylab="Fluorescence (Delta Rn)",
         xlab="Cycles",
         main="TITLE",
         scales = list(
           x = list(draw = FALSE),
           y = list(draw = FALSE),
           relation="same",
           alternating=TRUE),
         as.table = TRUE,
         layout = c(10,5),
         par.settings = list(
           strip.background=list(col="white"),
           # layout.heights = list(strip = 0.8),
           axis.text = list(cex = 0.6),
           par.xlab.text = list(cex = 0.75),
           par.ylab.text = list(cex = 0.75),
          par.main.text = list(cex = 0.8)
           superpose.symbol = list(pch = ".", cex = 2)
         ),
         strip    = FALSE,
         type = "p",
         col = 1,
         panel = panel.superpose,
         panel.groups = function(x,y,...,group.number){

                   panel.xyplot(x,y,... )

                   # text argument can be a vector of values not
                   # necessarily the group name
                   grid.text(c(LETTERS,letters)[group.number],
                             y = 0.93, x = 0.5,
                             default.units = "npc",
                             just = c("left", "bottom"),
                             gp = gpar(fontsize = 7) )

         }
  )

You could use panel.text instead of grid.text
Duncan

-----Original Message-----
From: Luigi Marongiu [mailto:marongiu.luigi at gmail.com] 
Sent: Wednesday, 22 April 2015 08:24
To: Duncan Mackay
Subject: Re: [R] high density plots using lattice dotplot()

Dear Duncan,
thank you for your reply. I tried to implement your suggestions but as
is on your reply did not work (actually R crashed) and a slight
elaboration returned the figure attached, which is essentially still
displaying text and not drawing the data. Here is what I wrote:

xyplot(Delta.Rn ~ Cycle | Well,
         data = PLATE,
         ylab="Fluorescence (Delta Rn)",
         xlab="Cycles",
         main=TITLE,
         scales = list(
           x = list(draw = FALSE),
           y = list(draw = FALSE),
           relation="same",
           alternating=TRUE),
         as.table = TRUE,
         layout = c(24,16),
         par.settings = list(
           strip.background=list(col="white"),
           axis.text = list(cex = 0.6),
           par.xlab.text = list(cex = 0.75),
           par.ylab.text = list(cex = 0.75),
           superpose.symbol = list(pch = ".", cex = 2)
         ),
         strip    = FALSE,
         type = "p",
         layout.heights = list(strip = 0.8),
         panel = function(x,y, subscripts, groups,...){
           panel.superpose(x,y,subscripts,groups,...,
                           col = ...)
           panel.text(x,y,...,cex = 0.6)
         }
  )


How can I improve the script?
Many thanks
Luigi

On Tue, Apr 21, 2015 at 12:35 AM, Duncan Mackay <dulcalma at bigpond.com> wrote:
> Hi Luigi
>
> Strips take up space so if you are willing to not have strip and put the
> strip values within the plot area then
>
>       xyplot(y ~ x|cond.factor, data = ...,
>              as.table = T,
>              groups   = ...,
>              layout   = ...,
>              drop.unused = T,
>              par.settings = list(axis.text = list(cex = 0.6),
>                                  par.xlab.text = list(cex = 0.75),
>                                  par.ylab.text = list(cex = 0.75)
>                                  superpose.symbol = list(pch = ".", cex = 2)
>                             ),
>              strip    = FALSE,
>              scales   = list(x = list(alternating = 2),
>                              y = list(alternating = FALSE)
>                              ),
>              type = "p",
>              panel = function(x,y, subscripts, groups,...){
>                                 panel.superpose(x,y,subscripts,groups,...,
> col = ...)
>                                 panel.text(x,y,...,cex = 0.6)
>                             }
>       )
>
> if the text values are a vector
>       stext = ...
>       xyplot(y ~ x|cond.factor, data = ...,
>              as.table = T,
>              groups   = ...,
>              layout   = ...,
>              drop.unused = T,
>              par.settings = list(axis.text = list(cex = 0.6),
>                                  par.xlab.text = list(cex = 0.75),
>                                  par.ylab.text = list(cex = 0.75)
>                                  superpose.symbol = list(pch = ".", cex = 2)
>                             ),
>              strip    = FALSE,
>              scales   = list(x = list(alternating = 2),
>                              y = list(alternating = FALSE)
>                              ),
>              type = "p",
>              panel = function(x,y, subscripts, groups,...){
>                                pnl = panel.number()
>                                 panel.superpose(x,y,subscripts,groups,...,
> col = ...)
>                                 panel.text(x,y,stext[pnl],cex = 0.6)
>                             }
>       )
>
> you could also you group.number instead of pnl if it is needed elsewhere.
> text position could be done in a similar fashion if needed to be in
> different places for some panels.
>
> If you require the strip then an additional par.settings is
> layout.heights = list(strip = 0.8)
> or even untested in this situation
> strip = FALSE
> strip.left  = TRUE
>
> 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 [mailto:r-help-bounces at r-project.org] On Behalf Of Luigi
> Marongiu
> Sent: Sunday, 19 April 2015 19:28
> To: r-help
> Subject: [R] high density plots using lattice dotplot()
>
> Dear all,
> I am trying to plot the results of a PCR experiments that involves 384
> individual plots. Admittedly the space for the plots will be tiny, but
> I just nedd some icon to have a feeling of the layout of the
> experiment and a quick comparison of the plots.
> I believe that lattice would be the right tool, but when I tried to
> implement i got an error. Specifically the output would be a A4 pdf,
> so with about 600 cm2 of drawing space, which gives about 1.5 cm2 for
> each plot; removing the labels that might just work.
> So I have the y values = 'fluorescence', x 'values' = cycles and 384
> 'well' data. I implemented to begin with:
>
> xyplot(fluorescence ~ cycles | well,
>          ylab="Fluorescence",
>          xlab="Cycles",
>          main=list(draw = FALSE),
>          scales = list(
>            x = list(draw = FALSE),
>            y = list(draw = FALSE),
>            relation="same",
>            alternating=TRUE),
>          layout = c(24,16),
>          par.settings = list(strip.background=list(col="white")),
>          pch = "."
>   )
>
> but the  the individual graphs show only the writing "data" instead of
> the actual plots.
> How can I overcome this error?
> Thank you
> Best regards
> Luigi
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>



More information about the R-help mailing list