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
>>> example
DF <-
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.
>>>
>>
>