[R] two questions re: the use of lattice (Q1 SOLVED, not Q2)

Peter Ehlers ehlers at ucalgary.ca
Mon Jul 23 05:06:47 CEST 2012


On 2012-07-22 19:09, Ranjan Maitra wrote:
> On Sun, 22 Jul 2012 18:58:39 -0700 Peter Ehlers <ehlers at ucalgary.ca>
> wrote:
>
>> On 2012-07-22 18:03, Ranjan Maitra wrote:
>>>
>>>>>> [I had to dig back to see what your Q2 was. It's good to keep context.]
>>>>>>
>>>>>> Try this:
>>>>>>
>>>>>>      p <- bwplot(Error~Method | sigma + INU, data = z,
>>>>>>             scales = list(rot=90), horiz = FALSE,
>>>>>>             layout = c(5,3), col = "red")
>>>>>>
>>>>>>      require(latticeExtra)
>>>>>>      useOuterStrips(p,
>>>>>>           strip = <<your sigma-strip function>>,
>>>>>>           strip.left = strip.custom(
>>>>>>               var.name = "INU", sep = " = ",
>>>>>>               strip.names = TRUE)
>>>>>>      )
>>>>>>
>>>>>
>>>>> This works!! Thanks very much!! May I also ask how I can put in a "%"
>>>>> after the INU value? i.e., I want the labels to be INU = 0%, INU = 20%,
>>>>> INU = 40% (instead of INU = 0, INU = 20 and INU = 40).
>>>>
>>>> Define:
>>>>
>>>>      INUExpr <- paste0("INU = ", c(0,20,40), "%")
>>>>
>>>> Then
>>>>
>>>>        useOuterStrips(p,
>>>>           strip = <<your sigma-strip function>>,
>>>>           strip.left = << your strip function with
>>>>                  var.name = INUExpr[which.panel] >>
>>>>      )
>>>>
>>>> Peter Ehlers
>>>
>>> Thanks, Peter! I have been trying things like this all afternoon. But i
>>> still get the same problem:
>>>
>>> The following, from your earlier e-mail works (cut-and-paste should be
>>> fine):
>>>
>>>
>>> library(lattice)
>>> library(latticeExtra)
>>> z <- cbind(rep(c("BIC", "ICL", "s_v", "Q_v", "sig-q",
>>>                         "s_lsk", "s_lML", "s_mlsk", "s_mlML", "s_la8",
>>> "s_haar"), each = 250), rep(c(5, 10, 20, 30, 50), each = 50))
>>> z <- rbind(cbind(z, 0), cbind(z, 20), cbind(z, 40))
>>> z <- cbind(z, rnorm(n = nrow(z)))
>>> z <- as.data.frame(z)
>>> names(z) <- c("Method", "sigma", "INU", "Error")
>>> sigma <- as.numeric(levels(z$sigma))
>>> sigmaExprList <- lapply(sigma, function(s) bquote(italic(sigma) == .
>>> (s))) sigmaExpr <- as.expression(sigmaExprList)
>>>
>>>
>>>
>>> p <- bwplot(Error~factor(Method, levels = unique(Method)) | sigma +
>>> INU, data = z, scales = list(rot=90), horiz = FALSE,
>>>            layout = c(3,5), col = "red")
>>>
>>>     require(latticeExtra)
>>>
>>>     useOuterStrips(p,
>>>          strip =  function(which.given, which.panel, var.name,
>>>            strip.levels = FALSE,
>>>            strip.names = TRUE, ...) {
>>>            strip.default(which.given, which.panel,
>>>                          var.name = sigmaExpr[which.panel],
>>>                          strip.levels = FALSE,
>>>                          strip.names = TRUE, ...)
>>>           },
>>>                    strip.custom(
>>>                                 var.name = "INU", sep = " = ",
>>>                                 strip.names = TRUE))
>>>
>>>
>>>
>>> However, this (edition of the latter) does not:
>>>
>>> INUExpr <- paste0("INU = ", c(0,20,40), "%")
>>>
>>>     useOuterStrips(p,
>>>          strip =  function(which.given, which.panel, var.name,
>>>            strip.levels = FALSE,
>>>            strip.names = TRUE, ...) {
>>>            strip.default(which.given, which.panel,
>>>                          var.name = sigmaExpr[which.panel],
>>>                          strip.levels = FALSE,
>>>                          strip.names = TRUE, ...)
>>>           },
>>>          strip.left = function(which.given, which.panel, var.name,
>>>            strip.levels = FALSE,
>>>            strip.names = TRUE, ...) {
>>>                    strip.custom(
>>>              var.name = INUExpr[which.panel],
>>>              strip.names = TRUE, ...)
>>>                  }
>>>     )
>>>
>>>
>>> Clearly, I am doing something wrong in defining the strip function. (It
>>> does not help that i am not completely at home with it.)  Can you or
>>> someone please help some more?
>>
>> Actually, it would work if you made strip.left a more accurate
>> copy of your strip function. But I hadn't taken a close enough
>> look at your strip function. I don't think it's needed at all.
>> Try this:
>>
>>    p <- bwplot(Error ~ Method | sigma + INU, data = z,
>>          scales = list(rot=90), horiz = FALSE,
>>          layout = c(5,3), col = "red")
>>
>>    useOuterStrips(p,
>>       strip = strip.custom(
>>            factor.levels = sigmaExpr),
>>       strip.left = strip.custom(
>>            factor.levels = INUExpr)
>>    )
>>
>> BTW, you don't need the italic() on sigma - it does nothing in plotmath.
>
> Yes, thanks for this and also the corrections. One last question (I
> guess):
>
> my sigmas are no longer in the order of 5, 10, 20, 30, 50. How do I fix
> that?

Just reset the levels of z$sigma (and also redefine sigmaExpr):

   z$sigma <- factor(z$sigma,
                   levels = c(5,10,20,30,50))  # new levels order

   sigmaExprList <- lapply(as.numeric(levels(z$sigma)),
                           function(s) bquote(sigma == .(s)))
   sigmaExpr <- as.expression(sigmaExprList)
   INUExpr <- paste0("INU = ", c(0,20,40), "%")

   p <- bwplot(Error ~ Method | sigma + INU, data = z,
          scales = list(rot=90), horiz = FALSE,
          layout = c(5,3), col = "red")

   useOuterStrips(p,
      strip = strip.custom(
           factor.levels = sigmaExpr),
      strip.left = strip.custom(
           factor.levels = INUExpr)
   )

Peter Ehlers

>
> Thanks again!!
>
> Ranjan
>
> ____________________________________________________________
> FREE 3D MARINE AQUARIUM SCREENSAVER - Watch dolphins, sharks & orcas on your desktop!
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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