Dear r-help,
Now I am drawing graphs with xyplot function.
In order to place a legend under the plots I use the key argument in
the xyplot function.
One of the 'key' components is 'divide', which defines a number of
points on the each line of the legend. The default is 3 points.
I would like a single point, so I set divide = 1.
Call to xyplot didn't produce any points at all.
The body of draw.key function contains the following
pointsGrob(x=(1:key$divide-1)/(key$divide-1), y=rep(0.5,key$divide),
[skip]
)
When key$divide=1, x is NaN...
--
Best regards
Wladimir Eremeev mailto:wl at eimb.ru
==========================================================================
Research Scientist, PhD Leninsky Prospect 33,
Space Monitoring & Ecoinformation Systems Sector, Moscow, Russia, 119071,
Institute of Ecology, Phone: (095) 135-9972;
Russian Academy of Sciences Fax: (095) 135-9972
Lattice: it seems, a bug in draw.key function
5 messages · Vladimir Eremeev, Deepayan Sarkar
On Friday 20 May 2005 07:05 am, Wladimir Eremeev wrote:
Dear r-help,
Now I am drawing graphs with xyplot function.
In order to place a legend under the plots I use the key argument in
the xyplot function.
One of the 'key' components is 'divide', which defines a number of
points on the each line of the legend. The default is 3 points.
I would like a single point, so I set divide = 1.
Call to xyplot didn't produce any points at all.
The body of draw.key function contains the following
pointsGrob(x=(1:key$divide-1)/(key$divide-1), y=rep(0.5,key$divide),
[skip]
)
When key$divide=1, x is NaN...
There's certainly a problem (at least one of omission in the documentation),
but I'm not sure what the best way to resolve it would be. This is what
currently happens on S-PLUS (6.0) and R:
divide = 3: o--o--o S-PLUS/R
divide = 2: o-----o S-PLUS/R
divide = 1: o S-PLUS
------- R
The difference in the 'divide = 1' case was not intentional, I just never
checked it.
Possible `solutions' are:
1. keep things as they are and clarify the documentation (namely, saying that
'divide' has to be greater than 1 to make sense)
2. change it to behave like S-PLUS (but that seems silly, since one might then
just as well use 'points' instead of 'lines')
3. do something else entirely, like ---o--- . This is not attractive from a
programmers point of view because it makes 'divide = 1' behave
inconsistently with other values of 'divide'.
I'm open to suggestions.
Deepayan
On Friday 20 May 2005 10:05 am, Wladimir Eremeev wrote:
Dear Deepayan,
I suggest something like
pointsGrob(
x=if(key$divide>1){(1:key$divide-1)/(key$divide-1)} else 0.5,
[blah-blah-blah]
)
This looks like your 3rd variant.
However, I haven't try very hard to verify my solution.
I tried to redefine the entire function draw.key in my working environment,
but this didn't work.
I use R 2.1.0 on windows 2000, packages are precompiled binaries.
Am I right in thinking, that despite the presence of my function
draw.key, xyplot used the function, defined in the package?
Yes. It has to do with namespaces. Try ?assignInNamespace Deepayan
Dear Deepayan,
I suggest something like
pointsGrob(
x=if(key$divide>1){(1:key$divide-1)/(key$divide-1)} else 0.5,
[blah-blah-blah]
)
This looks like your 3rd variant.
However, I haven't try very hard to verify my solution.
I tried to redefine the entire function draw.key in my working environment,
but this didn't work.
I use R 2.1.0 on windows 2000, packages are precompiled binaries.
Am I right in thinking, that despite the presence of my function
draw.key, xyplot used the function, defined in the package?
DS> There's certainly a problem (at least one of omission in the documentation),
DS> but I'm not sure what the best way to resolve it would be. This is what
DS> currently happens on S-PLUS (6.0) and R:
DS> divide = 3: o--o--o S-PLUS/R
DS> divide = 2: o-----o S-PLUS/R
DS> divide = 1: o S-PLUS
DS> ------- R
I would like to see ---o---
DS> Possible `solutions' are:
DS> 1. keep things as they are and clarify the documentation (namely, saying that
DS> 'divide' has to be greater than 1 to make sense)
DS> 2. change it to behave like S-PLUS (but that seems silly, since one might then
DS> just as well use 'points' instead of 'lines')
DS> 3. do something else entirely, like ---o--- . This is not attractive from a
DS> programmers point of view because it makes 'divide = 1' behave
DS> inconsistently with other values of 'divide'.
Marginal conditions need to be treated individually... :)
--
Best regards
Wladimir Eremeev mailto:wl at eimb.ru
==========================================================================
Research Scientist, PhD Leninsky Prospect 33,
Space Monitoring & Ecoinformation Systems Sector, Moscow, Russia, 119071,
Institute of Ecology, Phone: (095) 135-9972;
Russian Academy of Sciences Fax: (095) 135-9972
DS> Yes. It has to do with namespaces. Try ?assignInNamespace Thank you. It works. I have got the desired output (---o---). -- Best regards Wladimir Eremeev mailto:wl at eimb.ru