[R] single strip for the same group in dotplot lattice

Luigi Marongiu marongiu.luigi at gmail.com
Fri Feb 24 10:27:54 CET 2017


Dear all,
Duncan has provided a splendid example that works within lattice that
sorted the problem. For sake of argument I will report the updated script
with the solution (the optimum now would be to customize the label of the
outer strips); this new version requires latticeExtra and uses the
useOuterStrips function:

>>>
cluster <- c(rep("run_1", 45), rep("run_2", 45))
type <- rep(c("blank", "positive", "negative"),30)
target <- rep(c(rep("A", 3), rep("B", 3), rep("C", 3), rep("D", 3),
rep("E", 3)), 6)
value <- rep(c(rnorm(1, mean=0.001, sd=0.1), rnorm(1, mean=2, sd=1),
rnorm(1, mean=1, sd=1)),30)
my.data <- data.frame(cluster, type, target, value)

library(lattice)
library(latticeExtra)
useOuterStrips(
  strip = strip.custom(par.strip.text = list(cex = 0.75)),
  strip.left = strip.custom(par.strip.text = list(cex = 0.75)),
dotplot(
  value ~ type|target + cluster,
  my.data,
  groups = type,
  pch=21,
  main = "Luminex analysis MTb humans",
  xlab = "Target", ylab = "Reading",
  col = c("grey", "green", "red"),
  par.settings = list(strip.background = list(col="paleturquoise")),
  scales = list(alternating = FALSE, x = list(labels = c("", "", ""))),
  key = list(
    space = "top",
    columns = 3,
    text = list(c("Blank", "Negative", "Positive"), col="black"),
    rectangles = list(col=c("grey", "green", "red"))
  )
)
)

<<<
also, the answer provided by Paul does the job all right, but uses the
package grid instead of lattice. The stripless package (Bert Gunter's
suggestion) might be another approach but again require to study the code
in detail.
Thank you all very much indeed for  your support,
Luigi

On Thu, Feb 23, 2017 at 9:00 AM, Luigi Marongiu <marongiu.luigi at gmail.com>
wrote:

> Dear Duncan and Philip,
> thank you for your answers. maybe the toy data I gave it is a bit too
> easy, so I am attaching a new dataset with 5 targets. As you can see from
> it, now there are 5 panel strips with the label "run_1" and 5 with the
> label "run_2". What I would like to do is to merge those with the same
> label so to have only two labels "run_1" and "run_2".
> the examples from Duncan contains plenty of keys but I think make the
> reading of the plot more difficult; most of the plots have only one strip.
> thank you
> luigi
>
> >>>
> # the values are actually repeated, but they are just for example
> cluster <- c(rep("run_1", 45), rep("run_2", 45))
> type <- rep(c("blank", "positive", "negative"),30)
> target <- rep(c(rep("A", 3), rep("B", 3), rep("C", 3), rep("D", 3),
> rep("E", 3)), 6)
> value <- rep(c(rnorm(1, mean=0.001, sd=0.1), rnorm(1, mean=2, sd=1),
> rnorm(1, mean=1, sd=1)),30)
> my.data <- data.frame(cluster, type, target, value)
>
> library(lattice)
> dotplot(
>   value ~ type|target + cluster,
>   my.data,
>   groups = type,
>   pch=21,
>   main = "Luminex analysis MTb humans",
>   xlab = "Target", ylab = "Reading",
>   col = c("grey", "green", "red"),
>   par.settings = list(strip.background = list(col="paleturquoise")),
>   scales = list(alternating = FALSE, x = list(labels = c("", "", ""))),
>   key = list(
>     space = "top",
>     columns = 3,
>     text = list(c("Blank", "Negative", "Positive"), col="black"),
>     rectangles = list(col=c("grey", "green", "red"))
>   )
> )
>
>
> On Thu, Feb 23, 2017 at 2:50 AM, Duncan Mackay <dulcalma at bigpond.com>
> wrote:
>
>> Hi Liugi
>>
>> Here are some ideas quickly
>>
>> 4 panels diagonals are blank
>>
>> mdata = my.data
>> mdata$ct <- paste(target, "Run", rep(1:2, each = 6))
>> mdata$typeT <- paste(mdata$target,mdata$type)
>>
>> dotplot(
>>   value ~ type|ct,
>>   mdata2,
>>   groups = typeT,
>>   par.settings = list(strip.background = list(col="paleturquoise"),
>>                       superpose.symbol = list(col = c(2:4),
>>                                               pch = rep(c(1,20),each =
>> 3))),
>> # type
>>   scales = list(alternating = FALSE, x = list(labels = c("", "", ""))),
>>   main = "Luminex analysis MTb humans",
>>   xlab = "Target",
>>   ylab = "Reading",
>>   auto.key = T,
>>   panel = panel.superpose
>> )
>>
>> # for when the 4 panels have plots not 2 as now
>>  mdata2 = mdata
>>  mdata2$target = rep(LETTERS[2:1], ea=6)
>>  mdata2$value= mdata2$value+0.1
>>  mdata2 <- rbind(mdata,mdata2)
>>
>> mdata2$typeT <- paste(mdata2$target,mdata2$type)
>>
>>  dotplot(
>>    value ~ type|target + cluster,
>>    mdata2,
>>    groups = typeT,
>>    par.settings = list(strip.background = list(col="paleturquoise"),
>>                        superpose.symbol = list(col = c(2:4),
>>                                                pch = rep(c(1,20),each =
>> 3))), # type
>>    scales = list(alternating = FALSE, x = list(labels = c("", "", ""))),
>>    main = "Luminex analysis MTb humans",
>>    xlab = "Target",
>>    ylab = "Reading",
>>    auto.key = T,
>>    panel = panel.superpose
>>  )
>>
>>
>>  dotplot(
>>    value ~ type|ct,
>>    mdata2,
>>    groups = typeT,
>>    par.settings = list(strip.background = list(col="paleturquoise"),
>>                        superpose.symbol = list(col = c(2:4),
>>                                                pch = rep(c(1,20),each =
>> 3))), # type
>>    scales = list(alternating = FALSE, x = list(labels = c("", "", ""))),
>>    main = "Luminex analysis MTb humans",
>>    strip    = strip.custom(factor.levels = paste("Run",1:2),
>>                         par.strip.text = list(cex = 1) ),
>>    xlab = "Target",
>>    ylab = "Reading",
>>    auto.key = T,
>>    panel = panel.superpose
>>  )
>>
>> dotplot(
>>   value ~ type|cluster,
>>   mdata2,
>>   groups = typeT,
>>   par.settings = list(strip.background = list(col="paleturquoise"),
>>                       superpose.symbol = list(col = c(2:4),
>>                                               pch = rep(c(1,20),each =
>> 3))),
>> # type
>>   scales = list(alternating = FALSE, x = list(labels = c("", "", ""))),
>>   main = "Luminex analysis MTb humans",
>>   xlab = "Target",
>>   ylab = "Reading",
>>   auto.key = T,
>>   panel = panel.superpose
>> )
>>
>>
>> Regards
>>
>> Duncan
>>
>> -----Original Message-----
>> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Luigi
>> Marongiu
>> Sent: Wednesday, 22 February 2017 21:26
>> To: P Tennant; r-help
>> Subject: Re: [R] single strip for the same group in dotplot lattice
>>
>> Dear Philip,
>> the data is indeed a toy data: the real one will have 15 panels (=targets)
>> and two or three clusters. this means that I will have 15 strips with the
>> label "run 1" = "cluster 1" etc. the point of the toy data is that I get a
>> 4x4 panel plot with 8 strips labelled "run 1", "run 2", "A" and "B". What
>> I
>> am looking for is to collapse the strips so to get only one label "run 1"
>> and only one with "run 2" in order to simplify the plot. Hope this helps.
>> Thanks
>> Luigi
>>
>> On Wed, Feb 22, 2017 at 9:53 AM, P Tennant <philipt900 at iinet.net.au>
>> wrote:
>>
>> > Hi Luigi,
>> >
>> > I'm afraid I don't understand your toy data as you've described it, but
>> if
>> > you really don't have run 2 for target A, and don't have run 1 for
>> target
>> > B, why not just create another factor that reflects this, and plot that?
>> >
>> >  my.data$clus2 <- with(my.data, interaction(cluster, target))
>> >
>> >  and call: dotplot(value ~ type| clus2, ... )
>> >
>> >
>> > Philip
>> >
>> >
>> > On 22/02/2017 8:03 PM, Luigi Marongiu wrote:
>> >
>> >> dear all,
>> >> I have a set of data that is subdivided in cluster (run 1/run 2) and in
>> >> target (A/B). When plotting, I obtain a panel strip with "run 1" and
>> "run
>> >> 2" for each "A" and "B" panel, so "run 1" appears twice and so does
>> "run
>> >> 2". It is possible to merge the strip together so that I will have "run
>> 1"
>> >> or "run 2" only once? this will reduce the complexity of the data and
>> >> allow
>> >> more space for more detailed information in the strip.
>> >> the data follows,
>> >> thank you
>> >> L
>> >>
>> >> cluster<- c(rep("run_1", 6), rep("run_2", 6))
>> >> type<- rep(c("blank", "positive", "negative"),2)
>> >> target<- c(rep("A", 6), rep("B", 6))
>> >> value<- c(0.01, 1.1, 0.5,
>> >>             0.02, 1.6, 0.8,
>> >>             0.07, 1.4, 0.7,
>> >>             0.03, 1.4, 0.4)
>> >> my.data<- data.frame(cluster, type, target, value)
>> >>
>> >> library(lattice)
>> >> dotplot(
>> >>    value ~ type|target + cluster,
>> >>    my.data,
>> >>    groups = type,
>> >>    pch=21,
>> >>    main = "Luminex analysis MTb humans",
>> >>    xlab = "Target", ylab = "Reading",
>> >>    col = c("grey", "green", "red"),
>> >>    par.settings = list(strip.background = list(col="paleturquoise")),
>> >>    scales = list(alternating = FALSE, x = list(labels = c("", "",
>> ""))),
>> >>    key = list(
>> >>      space = "top",
>> >>      columns = 3,
>> >>      text = list(c("Blank", "Negative", "Positive"), col="black"),
>> >>      rectangles = list(col=c("grey", "green", "red"))
>> >>    )
>> >> )
>> >>
>> >>         [[alternative HTML version deleted]]
>> >>
>> >> ______________________________________________
>> >> 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/posti
>> >> ng-guide.html
>> >> and provide commented, minimal, self-contained, reproducible code.
>> >>
>> >
>> >
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> 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/posti
>> ng-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list