Skip to content

Lattice: it seems, a bug in draw.key function

5 messages · Vladimir Eremeev, Deepayan Sarkar

#
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
#
On Friday 20 May 2005 07:05 am, Wladimir Eremeev wrote:
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:
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