Hi, and thanks for your email,

I realise my example was not very good. The actual dataset I'm trying to plot is rather big and this oversimplified example did not make much sense.

I actually do need to color different subsets of the data differently in each panel, that's why I thought of using panel.groups. Here's a more realistic example:


x <- seq(1, 2*pi, length=100)
numberOfCurves <- 20
y1 <- sapply(seq(0, pi/2, length=numberOfCurves), function(phi) sin(x +phi)) y2 <- sapply(seq(0, pi/2, length=numberOfCurves), function(phi) cos(x +phi))
y <- cbind(y1, y2)

fact <- factor(rep(c("cos", "sin"), each=numberOfCurves*100))
fact2 <- factor(rep(seq(0, pi, length=numberOfCurves), each=100, length=2*numberOfCurves*100))

my.df <- data.frame(x=rep(x, length=800), y=as.vector(y), fact = fact, fact2 = fact2)
head(my.df)


myColors <- c("grey", "grey", "red", rep("grey", ncol(y)-3))

        xyplot(y ~ x | fact,  data = my.df, groups = fact2, type="l",
                par.settings=list(superpose.line=list(col=myColors, lwd=2)),
              panel =  panel.superpose,
              panel.groups = function(..., group.number) {

                panel.xyplot(...)
        
              })

Two things I don't like about my approach:

- I'd rather select the colors in the panel function than set a specific palette in par.settings, as it's not obvious to me what the order of the plotting will be. This is where I fail to use group.number correctly

- the purpose of the red line is make this particular curve stand out from the mess of grey curves. However, they partially cover it and I don't really know how to change the plotting order (or replot the red one only on top if it's any easier)

Hope this is a bit clearer,

Best regards,

baptiste





On 7 Oct 2008, at 18:25, Bert Gunter wrote:

Not exactly sure what you want to do, but ...

In your example, you do not need groups, since the color doesn't change within the levels of the conditioning variable (fact). Hence you can use the panel.number() function to choose the plotting color of each panel, like
this:

## .. continuing with your example

myColors <- rep(c(2,4),2)

xyplot(y ~ x | fact,  data = my.df,
             panel =  function(...){
           panel.xyplot(...,col=myColors[panel.number()])
        }
         )

If you actually **need** groups (to color different subsets of the data
within a panel differently). it does get a bit more complicated.
Incidentally, note that col is already a formal argument of panel.superpose
and was therefore  picked up in the ... argument of the panel.groups
function -- that's why you got the error you did when you repeated col
explicitly in the panel.xyplot call. By default, it's values are those of trellis.par.get("superpose.symbol") I believe. Also, group.number appears to
be undefined in your code.

HTH

Cheers,
Bert Gunter

______________________________________________
R-help@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.

_____________________________

Baptiste AuguiƩ

School of Physics
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK

Phone: +44 1392 264187

http://newton.ex.ac.uk/research/emag

______________________________________________
R-help@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.

Reply via email to