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
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.
Hi Luigi The layout.heights is in the wrong place try 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), layout.widths(main = 0.9,sub = 0), # see below layout.heights = list(strip = 0.8) ), Space is important so every 0.05 you can get away with is vital. see names(trellis.par.get()) trellis.par.get()$layout.widths for more that may be changed and the same for layout.heights, it is amazing what small changes will create extra panel space I modified a script that I did a few years ago so there may have been some changes For the panel function if the following panel = function(x,y, subscripts, groups,...){ panel.superpose(x,y,subscripts,groups,..., col = ...) panel.text(x,y,...,cex = 0.6) } does not work you will have to use panel.groups eg untested (it?s a while since I have used this) panel = panel.superpose, panel.groups = function(x,y,...){ panel.xyplot(x,y,yourtext, cex = 0.6) # I meant with the... to put in a suitable object/code }) 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. >
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. >
Hi Luigi Try set.seed(1) PLATE <- data.frame(Delta.Rn = rnorm(500), Cycle = rnorm(500), Delta2 = rnorm(500)+1, Well = rep(1:50, each = 10)) head(PLATE,10) xyplot(Delta.Rn+Delta2 ~ Cycle | Well, data = subset(PLATE, Well %in% 1:49), allow.multiple = TRUE, 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, col = c(2,4) ) ), strip = FALSE, type = "p", key = list(text = list(label = c("Delta.Rn","Delta2")), points = list(cex = 0.6, pch = 16, col = c(2,4)), cex = 0.6, x = 0.9, y = 0.1), panel = panel.superpose, panel.groups = function(x,y,...){ panel.xyplot(x,y,... ) # text argument can be a vector of values not # necessarily the group name pnl = panel.number() # needed as group.number if added is now either 1 or 2 grid.text(c(LETTERS,letters)[pnl], y = 0.93, x = 0.5, default.units = "npc", just = c("left", "bottom"), gp = gpar(fontsize = 7) ) } ) Remember to delete the group argument (I forgot to at first as the groups are now Delta.Rn Delta2) You may have 1+ empty panels so put the legend there where ever it is just amend the x and y or fine tune them you can have the pch = "." and increase cex but it will become as square with large cex Duncan -----Original Message----- From: Luigi Marongiu [mailto:marongiu.luigi at gmail.com] Sent: Thursday, 23 April 2015 10:05 To: Duncan Mackay Subject: Re: [R] high density plots using lattice dotplot() Dear Duncan, sorry to come back so soon, but i wanted to ask you whether it would be possible to plot two sets of lines within each box, let's say a main value A and a secondary value B. In normal plots I could use a plot() followed by points(); what would be the strategy here? Thank you again, best regards, Luigi On Wed, Apr 22, 2015 at 6:46 AM, Duncan Mackay <dulcalma at bigpond.com> wrote:> > 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. >> >
Hi Luigi Michael answered your question about printing lattice and ggplot require their graphics to be in print() If you have problems in printing you may have to use trellis.device(device = pdf, # or what ever the actual device is file = ####, <remainder of script>) ? trellis.device for info I occasionally have to use it sometimes instead of pdf etc Duncan -----Original Message----- From: Luigi Marongiu [mailto:marongiu.luigi at gmail.com] Sent: Thursday, 23 April 2015 22:56 To: Duncan Mackay Subject: Re: [R] high density plots using lattice dotplot() Dear Duncan, many thanks for the precious help! I have rearranged what you sent me with a bit of stuff I wrote already for another project and the results seems to work fine. Best regards, Luigi>>> exampleDF <- data.frame(Y = rnorm(17280), X = rnorm(1:45), Y2 = rnorm(17280)+2, Z = 1:384) head(df,10) xyplot(Y ~ X | Z, data = DF, groups = Z, allow.multiple = TRUE, ylab= "Y VALUES", xlab="X VALUES", 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), par.main.text = list(cex = 0.8), superpose.symbol = list(type = "l", cex = 1) ), strip = FALSE, type = "l", col = 3, panel = panel.superpose ) On Thu, Apr 23, 2015 at 3:08 AM, Duncan Mackay <dulcalma at bigpond.com> wrote:> Hi Luigi > > Try > > set.seed(1) > > PLATE <- > data.frame(Delta.Rn = rnorm(500), > Cycle = rnorm(500), > Delta2 = rnorm(500)+1, > Well = rep(1:50, each = 10)) > head(PLATE,10) > > xyplot(Delta.Rn+Delta2 ~ Cycle | Well, > data = subset(PLATE, Well %in% 1:49), > allow.multiple = TRUE, > 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, > col = c(2,4) ) > ), > strip = FALSE, > type = "p", > key = list(text = list(label = c("Delta.Rn","Delta2")), > points = list(cex = 0.6, pch = 16, col = c(2,4)), > cex = 0.6, > x = 0.9, > y = 0.1), > panel = panel.superpose, > panel.groups = function(x,y,...){ > > panel.xyplot(x,y,... ) > > # text argument can be a vector of values not > # necessarily the group name > pnl = panel.number() # needed as group.number if added is now either 1 or 2 > > grid.text(c(LETTERS,letters)[pnl], > y = 0.93, x = 0.5, > default.units = "npc", > just = c("left", "bottom"), > gp = gpar(fontsize = 7) ) > > } > ) > > Remember to delete the group argument (I forgot to at first as the groups are now Delta.Rn Delta2) > You may have 1+ empty panels so put the legend there where ever it is just amend the x and y or fine tune them > you can have the pch = "." and increase cex but it will become as square with large cex > Duncan > > > -----Original Message----- > From: Luigi Marongiu [mailto:marongiu.luigi at gmail.com] > Sent: Thursday, 23 April 2015 10:05 > To: Duncan Mackay > Subject: Re: [R] high density plots using lattice dotplot() > > Dear Duncan, > sorry to come back so soon, but i wanted to ask you whether it would > be possible to plot two sets of lines within each box, let's say a > main value A and a secondary value B. In normal plots I could use a > plot() followed by points(); what would be the strategy here? > Thank you again, > best regards, > Luigi > > > On Wed, Apr 22, 2015 at 6:46 AM, Duncan Mackay <dulcalma at bigpond.com> wrote: >> >> 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. >>> >> >