Win2k, R1.7.1:
I am currently working with some growth curve data from a
biotoxicology experiment. Each of 12 subjects had their blood
drawn at 0, 2, 4, 6, 8, and 10 weeks. For the purposes of the
project, it would be helpful if I were able to do the following:
a. Produce 12 panels, each displaying the *same* data, with
the "strip" at the top of a particular panel showing
exactly one of the subject id's
b. For a particular panel, plot the time course data for
the subject whose id appears in the strip in some
really obvious color (like yellow, red, or blue),
with circles at each time point, and connecting the
"dots". In the same panel, those subjects whose id's
did NOT appear in the strip would ideally have their
data plotted in black, possibly with no symbols at
any of the time points, but still connecting the
"dots".
I apologize if the description of what is needed is vague.
It is possible to address (a) by duplicating the data set
twelve times and cbind()ing a factor variable so that each
of the duplicated data sets is associated with exactly one
of the subject id's. I have done this, and the code
subjects <- foo$subject.id
superpose.symbol <- trellis.par.get("superpose.symbol")
xyplot(log.response ~ week | factor.variable, data = foo,
panel = panel.superpose,
groups = subjects,
key = list(space = "top", columns = 6, transparent = TRUE,
text = list(levels(subjects)),
points = Rows(superpose.symbol,1:7))
)
works, with "factor.variable" corresponding to the cbind()ed
factor variable. Unfortunately, I have been unable to figure
out how to do (b). I would also like to determine a more
memory efficient way of doing (a) -- even though my current
data set is small (only 10 weeks of data per subject), that will
change.
Also, an examination of "superpose.symbol" reveals the
following:
> superpose.symbol <- trellis.par.get("superpose.symbol")
> superpose.symbol
$cex
[1] 0.8 0.8 0.8 0.8 0.8 0.8 0.8
$col
[1] "#00ffff" "#ff00ff" "#00ff00"
"#ff7f00" "#007eff" "#ffff00" "#ff0000"
$font
[1] 1 1 1 1 1 1 1
$pch
[1] "o" "o" "o" "o" "o"
"o" "o"
This seems to indicate that lattice graphics are restricted to
no more than seven colors, though I cannot believe that this is true.
Where might I search/read/learn about the available colors for
lattice plots and how to denote them? (I find "#ff7f00" to be
a little cryptic, for example.) Is there a table that relates
these ?hexadecimal? numbers to descriptions like "navy blue"
for Win2k?
Finally, is it possible to cause superpose.symbol to default to
more than 7 $cex/$col/$font/$pch values? Since I am working with
12 subjects, plots that assign a different color to each wind up
duplicating colors and symbols at some point.
Much thanks in advance,
david paul
Let's consider this simulated data:
foo <- data.frame(resp = do.call("c", lapply(as.list(rep(6, 12)),
function(x) sort(rnorm(x)))),
week = rep(2*0:5, 12),
id = factor(rep(1:12, each = 6)))
Does the following give you what you want ?
xyplot(resp ~ week | id, foo,
panel = function(x, y, col = sup.sym$col, panel.number, ...) {
## this part accesses the data frame directly, and needs to
## be adjusted accordingly if the name of the variables
## therein change. This draws the part meant for the whole
## data set
panel.superpose(x = foo$week, y = foo$resp,
subscripts = TRUE, groups = foo$id,
type = 'l', col = "black")
## this part draws the colored lines, each overwriting one
## of the background lines
sup.sym <- trellis.par.get("superpose.symbol")
col.this <- col[1 + ((panel.number - 1) %% length(col))]
panel.xyplot(x, y, type = 'b', col = col.this,
lwd = 2, cex = 1.2, ...)
})
This will by default use the colors in superpose.symbol, but you can override
that by specifying your own color as an argument to xyplot, perhaps something
like
xyplot(resp ~ week | id, foo, col = c("red", "yellow",
"blue"),
panel = ....
I personally don't see the point of using different colors though (that
would
seem useful to me only if the different colors appeared within the same
panel).
There's no restriction on the length of the elements of
trellis.par.get("superpose.symbol"). 7 (which is just as good a number
as any
other) is the default choice, inspired by Trellis in S. Set it to whatever
you want with trellis.par.set() or lset() (or just supply the colors to
xyplot(), which is usually more convenient for specific tasks like this).
Names like "navy blue" are just a convenience, and I doubt that all
256^3
colors in the RGB space have been named, so trying to get a name for
"#ff7f00" may not get you anywhere. R has a function col2rgb() that
converts
colors to RGB, e.g.
> col2rgb("#ff7f00")
[,1]
red 255
green 127
blue 0> col2rgb("navyblue")
[,1]
red 0
green 0
blue 128
If you are more comfortable with named colors, use them--- R accepts them
everywhere. A list of names it recognizes is produced by
> colors()
The help pages for colors and col2rgb have more information.
HTH,
Deepayan
On Friday 29 August 2003 11:14, Paul, David A wrote:> Win2k, R1.7.1:
>
> I am currently working with some growth curve data from a
> biotoxicology experiment. Each of 12 subjects had their blood
> drawn at 0, 2, 4, 6, 8, and 10 weeks. For the purposes of the
> project, it would be helpful if I were able to do the following:
>
> a. Produce 12 panels, each displaying the *same* data, with
> the "strip" at the top of a particular panel showing
> exactly one of the subject id's
> b. For a particular panel, plot the time course data for
> the subject whose id appears in the strip in some
> really obvious color (like yellow, red, or blue),
> with circles at each time point, and connecting the
> "dots". In the same panel, those subjects whose id's
> did NOT appear in the strip would ideally have their
> data plotted in black, possibly with no symbols at
> any of the time points, but still connecting the
> "dots".
>
> I apologize if the description of what is needed is vague.
> It is possible to address (a) by duplicating the data set
> twelve times and cbind()ing a factor variable so that each
> of the duplicated data sets is associated with exactly one
> of the subject id's. I have done this, and the code
>
> subjects <- foo$subject.id
> superpose.symbol <- trellis.par.get("superpose.symbol")
> xyplot(log.response ~ week | factor.variable, data = foo,
> panel = panel.superpose,
> groups = subjects,
> key = list(space = "top", columns = 6, transparent = TRUE,
> text = list(levels(subjects)),
> points = Rows(superpose.symbol,1:7))
> )
>
> works, with "factor.variable" corresponding to the cbind()ed
> factor variable. Unfortunately, I have been unable to figure
> out how to do (b). I would also like to determine a more
> memory efficient way of doing (a) -- even though my current
> data set is small (only 10 weeks of data per subject), that will
> change.
>
> Also, an examination of "superpose.symbol" reveals the
>
> following:
> > superpose.symbol <- trellis.par.get("superpose.symbol")
> > superpose.symbol
>
> $cex
> [1] 0.8 0.8 0.8 0.8 0.8 0.8 0.8
>
> $col
> [1] "#00ffff" "#ff00ff" "#00ff00"
"#ff7f00" "#007eff" "#ffff00" "#ff0000"
>
> $font
> [1] 1 1 1 1 1 1 1
>
> $pch
> [1] "o" "o" "o" "o" "o"
"o" "o"
>
>
> This seems to indicate that lattice graphics are restricted to
> no more than seven colors, though I cannot believe that this is true.
> Where might I search/read/learn about the available colors for
> lattice plots and how to denote them? (I find "#ff7f00" to be
> a little cryptic, for example.) Is there a table that relates
> these ?hexadecimal? numbers to descriptions like "navy blue"
> for Win2k?
>
> Finally, is it possible to cause superpose.symbol to default to
> more than 7 $cex/$col/$font/$pch values? Since I am working with
> 12 subjects, plots that assign a different color to each wind up
> duplicating colors and symbols at some point.
>
>
> Much thanks in advance,
> david paul
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
Thank you VERY much! That does address my questions.
Respectfully,
david paul
-----Original Message-----
From: Deepayan Sarkar [mailto:deepayan at stat.wisc.edu]
Sent: Friday, August 29, 2003 1:54 PM
To: Paul, David A; 'r-help at stat.math.ethz.ch'
Subject: Re: [R] Lattice plot questions
Let's consider this simulated data:
foo <- data.frame(resp = do.call("c", lapply(as.list(rep(6, 12)),
function(x) sort(rnorm(x)))),
week = rep(2*0:5, 12),
id = factor(rep(1:12, each = 6)))
Does the following give you what you want ?
xyplot(resp ~ week | id, foo,
panel = function(x, y, col = sup.sym$col, panel.number, ...) {
## this part accesses the data frame directly, and needs to
## be adjusted accordingly if the name of the variables
## therein change. This draws the part meant for the whole
## data set
panel.superpose(x = foo$week, y = foo$resp,
subscripts = TRUE, groups = foo$id,
type = 'l', col = "black")
## this part draws the colored lines, each overwriting one
## of the background lines
sup.sym <- trellis.par.get("superpose.symbol")
col.this <- col[1 + ((panel.number - 1) %% length(col))]
panel.xyplot(x, y, type = 'b', col = col.this,
lwd = 2, cex = 1.2, ...)
})
This will by default use the colors in superpose.symbol, but you can
override
that by specifying your own color as an argument to xyplot, perhaps
something
like
xyplot(resp ~ week | id, foo, col = c("red", "yellow",
"blue"),
panel = ....
I personally don't see the point of using different colors though (that
would
seem useful to me only if the different colors appeared within the same
panel).
There's no restriction on the length of the elements of
trellis.par.get("superpose.symbol"). 7 (which is just as good a number
as
any
other) is the default choice, inspired by Trellis in S. Set it to whatever
you want with trellis.par.set() or lset() (or just supply the colors to
xyplot(), which is usually more convenient for specific tasks like this).
Names like "navy blue" are just a convenience, and I doubt that all
256^3
colors in the RGB space have been named, so trying to get a name for
"#ff7f00" may not get you anywhere. R has a function col2rgb() that
converts
colors to RGB, e.g.
> col2rgb("#ff7f00")
[,1]
red 255
green 127
blue 0> col2rgb("navyblue")
[,1]
red 0
green 0
blue 128
If you are more comfortable with named colors, use them--- R accepts them
everywhere. A list of names it recognizes is produced by
> colors()
The help pages for colors and col2rgb have more information.
HTH,
Deepayan
On Friday 29 August 2003 11:14, Paul, David A wrote:> Win2k, R1.7.1:
>
> I am currently working with some growth curve data from a
> biotoxicology experiment. Each of 12 subjects had their blood drawn
> at 0, 2, 4, 6, 8, and 10 weeks. For the purposes of the project, it
> would be helpful if I were able to do the following:
>
> a. Produce 12 panels, each displaying the *same* data, with
> the "strip" at the top of a particular panel showing
> exactly one of the subject id's
> b. For a particular panel, plot the time course data for
> the subject whose id appears in the strip in some
> really obvious color (like yellow, red, or blue),
> with circles at each time point, and connecting the
> "dots". In the same panel, those subjects whose id's
> did NOT appear in the strip would ideally have their
> data plotted in black, possibly with no symbols at
> any of the time points, but still connecting the
> "dots".
>
> I apologize if the description of what is needed is vague.
> It is possible to address (a) by duplicating the data set twelve times
> and cbind()ing a factor variable so that each of the duplicated data
> sets is associated with exactly one of the subject id's. I have done
> this, and the code
>
> subjects <- foo$subject.id
> superpose.symbol <- trellis.par.get("superpose.symbol")
> xyplot(log.response ~ week | factor.variable, data = foo,
> panel = panel.superpose,
> groups = subjects,
> key = list(space = "top", columns = 6, transparent = TRUE,
> text = list(levels(subjects)),
> points = Rows(superpose.symbol,1:7))
> )
>
> works, with "factor.variable" corresponding to the cbind()ed
factor
> variable. Unfortunately, I have been unable to figure out how to do
> (b). I would also like to determine a more memory efficient way of
> doing (a) -- even though my current data set is small (only 10 weeks
> of data per subject), that will change.
>
> Also, an examination of "superpose.symbol" reveals the
>
> following:
> > superpose.symbol <- trellis.par.get("superpose.symbol")
> > superpose.symbol
>
> $cex
> [1] 0.8 0.8 0.8 0.8 0.8 0.8 0.8
>
> $col
> [1] "#00ffff" "#ff00ff" "#00ff00"
"#ff7f00" "#007eff" "#ffff00"
> "#ff0000"
>
> $font
> [1] 1 1 1 1 1 1 1
>
> $pch
> [1] "o" "o" "o" "o" "o"
"o" "o"
>
>
> This seems to indicate that lattice graphics are restricted to no more
> than seven colors, though I cannot believe that this is true. Where
> might I search/read/learn about the available colors for lattice plots
> and how to denote them? (I find "#ff7f00" to be a little
cryptic, for
> example.) Is there a table that relates these ?hexadecimal? numbers
> to descriptions like "navy blue" for Win2k?
>
> Finally, is it possible to cause superpose.symbol to default to more
> than 7 $cex/$col/$font/$pch values? Since I am working with 12
> subjects, plots that assign a different color to each wind up
> duplicating colors and symbols at some point.
>
>
> Much thanks in advance,
> david paul
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help