Re: [R] lattice xscale.components: different ticks on top/bottom axis

2011-04-06 Thread Boris.Vasiliev
 
 On Sat, Apr 2, 2011 at 1:29 AM,  boris.vasil...@forces.gc.ca wrote:
 
  On Fri, Mar 11, 2011 at 12:28 AM,
  boris.vasil...@forces.gc.ca wrote:
   Good afternoon,
  
   I am trying to create a plot where the bottom and top 
   axes have the 
   same scale but different tick marks.  I tried user-defined 
   xscale.component function but it does not produce 
   desired results.
   Can anybody suggest where my use of xscale.component function is 
   incorrect?
  
   For example, the code below tries to create a plot where 
   horizontal 
   axes limits are c(0,10), top axis has ticks at odd integers, and 
   bottom axis has ticks at even integers.
  
   library(lattice)
  
   df - data.frame(x=1:10,y=1:10)
  
   xscale.components.A - function(...,user.value=NULL) {
    # get default axes definition list; print user.value
    ans - xscale.components.default(...)
    print(user.value)
  
    # start with the same definition of bottom and top axes
    ans$top - ans$bottom
  
    # - bottom labels
    ans$bottom$labels$at - seq(0,10,by=2)
    ans$bottom$labels$labels - paste(B,seq(0,10,by=2),sep=-)
  
    # - top labels
    ans$top$labels$at - seq(1,9,by=2)
    ans$top$labels$labels - paste(T,seq(1,9,by=2),sep=-)
  
    # return axes definition list
    return(ans)
   }
  
   oltc - xyplot(y~x,data=df,
  
   scales=list(x=list(limits=c(0,10),at=0:10,alternating=3)),
                 xscale.components=xscale.components.A,
                 user.value=1)
   print(oltc)
  
   The code generates a figure with incorrectly placed 
   bottom and top 
   labels.  Bottom labels B-0, B-2, ... are at 0, 1, ... 
   and top labels T-1, T-3, ... are at 0, 1, ...  When 
   axis-function runs out of labels, it replaces labels with NA.
  
   It appears that lattice uses top$ticks$at to place labels and 
   top$labels$labels for labels.  Is there a way to override this 
   behaviour (other than to expand the labels$labels  vector to 
   be as long as ticks$at vector and set necessary elements to )?
 
  Well, top|bottom$ticks$at is used to place the ticks, and 
  $labels$at is used to place the labels. They should 
  typically be the 
  same, but you have changed one and not the other.
  Everything seems to work if you set $ticks$at to the same 
  values as $labels$at:
 
 
      ##  - bottom labels
  +   ans$bottom$ticks$at - seq(0,10,by=2)
      ans$bottom$labels$at - seq(0,10,by=2)
      ans$bottom$labels$labels - paste(B,seq(0,10,by=2),sep=-)
 
      ##  - top labels
  +   ans$top$ticks$at - seq(1,9,by=2)
      ans$top$labels$at - seq(1,9,by=2)
      ans$top$labels$labels - paste(T,seq(1,9,by=2),sep=-)
 
 
   Also, can user-parameter be passed into xscale.components() 
   function? (For example, locations and labels of ticks on the top 
   axis).  In the  code above, print(user.value) returns NULL even 
   though in the xyplot() call user.value is 1.
 
  No. Unrecognized arguments are passed to the panel function only, not 
  to any other function. However, you can always define an inline
  function:
 
  oltc - xyplot(y~x,data=df,
                 scales=list(x=list(limits=c(0,10), at = 0:10,
                             alternating=3)),
                 xscale.components = function(...)
                             xscale.components.A(..., user.value=1))
 
  Hope that helps (and sorry for the late reply).
 
  -Deepayan
 
 
  Deepyan,
 
  Thank you very much for your reply.  It makes things a bit clearer.
 
  It other words in the list prepared by xscale.components(), vectors 
  top|bottom$ticks$at and top|bottom$labels$at must be the same.
  If only every second tick is to be labelled then every second label 
  should be set explicitly to empty strings:
 
 Now when you put it that way, the current behaviour does seem 
 wrong (I didn't read your original post carefully enough). I 
 guess this was one of the not-yet-implemented things 
 mentioned in the Details section of ?xscale.components.default.
 
 I have added support for different ticks$at and labels$at in 
 the SVN sources in r-forge. You can test it from there (your 
 original code works as expected). I won't make a new release 
 on CRAN until after R
 2.13 is released (we are almost in code freeze now).
 
 -Deepayan
 

Great!
Thank you very much.
Boris.

__
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.


Re: [R] lattice xscale.components: different ticks on top/bottom axis

2011-04-05 Thread Deepayan Sarkar
On Sat, Apr 2, 2011 at 1:29 AM,  boris.vasil...@forces.gc.ca wrote:

 On Fri, Mar 11, 2011 at 12:28 AM,
 boris.vasil...@forces.gc.ca wrote:
  Good afternoon,
 
  I am trying to create a plot where the bottom and top axes have the
  same scale but different tick marks.  I tried user-defined
  xscale.component function but it does not produce desired results.
  Can anybody suggest where my use of xscale.component
  function is incorrect?
 
  For example, the code below tries to create a plot where horizontal
  axes limits are c(0,10), top axis has ticks at odd integers, and
  bottom axis has ticks at even integers.
 
  library(lattice)
 
  df - data.frame(x=1:10,y=1:10)
 
  xscale.components.A - function(...,user.value=NULL) {
   # get default axes definition list; print user.value
   ans - xscale.components.default(...)
   print(user.value)
 
   # start with the same definition of bottom and top axes
   ans$top - ans$bottom
 
   # - bottom labels
   ans$bottom$labels$at - seq(0,10,by=2)
   ans$bottom$labels$labels - paste(B,seq(0,10,by=2),sep=-)
 
   # - top labels
   ans$top$labels$at - seq(1,9,by=2)
   ans$top$labels$labels - paste(T,seq(1,9,by=2),sep=-)
 
   # return axes definition list
   return(ans)
  }
 
  oltc - xyplot(y~x,data=df,
 
  scales=list(x=list(limits=c(0,10),at=0:10,alternating=3)),
                xscale.components=xscale.components.A,
                user.value=1)
  print(oltc)
 
  The code generates a figure with incorrectly placed bottom and top
  labels.  Bottom labels B-0, B-2, ... are at 0, 1, ... and top
  labels T-1, T-3, ... are at 0, 1, ...  When axis-function runs out
  of labels, it replaces labels with NA.
 
  It appears that lattice uses top$ticks$at to place labels and
  top$labels$labels for labels.  Is there a way to override this
  behaviour (other than to expand the labels$labels vector to be as
  long as ticks$at vector and set necessary elements to )?

 Well, top|bottom$ticks$at is used to place the ticks, and
 $labels$at is used to place the labels. They should typically
 be the same, but you have changed one and not the other.
 Everything seems to work if you set $ticks$at to the same
 values as $labels$at:


     ##  - bottom labels
 +   ans$bottom$ticks$at - seq(0,10,by=2)
     ans$bottom$labels$at - seq(0,10,by=2)
     ans$bottom$labels$labels - paste(B,seq(0,10,by=2),sep=-)

     ##  - top labels
 +   ans$top$ticks$at - seq(1,9,by=2)
     ans$top$labels$at - seq(1,9,by=2)
     ans$top$labels$labels - paste(T,seq(1,9,by=2),sep=-)


  Also, can user-parameter be passed into xscale.components()
  function? (For example, locations and labels of ticks on the top
  axis).  In the  code above, print(user.value) returns NULL even
  though in the xyplot() call user.value is 1.

 No. Unrecognized arguments are passed to the panel function
 only, not to any other function. However, you can always
 define an inline
 function:

 oltc - xyplot(y~x,data=df,
                scales=list(x=list(limits=c(0,10), at = 0:10,
                            alternating=3)),
                xscale.components = function(...)
                            xscale.components.A(..., user.value=1))

 Hope that helps (and sorry for the late reply).

 -Deepayan


 Deepyan,

 Thank you very much for your reply.  It makes things a bit clearer.

 It other words in the list prepared by xscale.components(), vectors
 top|bottom$ticks$at and top|bottom$labels$at must be the same.
 If only every second tick is to be labelled then every second label
 should be set explicitly to empty strings:

Now when you put it that way, the current behaviour does seem wrong (I
didn't read your original post carefully enough). I guess this was one
of the not-yet-implemented things mentioned in the Details section of
?xscale.components.default.

I have added support for different ticks$at and labels$at in the SVN
sources in r-forge. You can test it from there (your original code
works as expected). I won't make a new release on CRAN until after R
2.13 is released (we are almost in code freeze now).

-Deepayan

__
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.


Re: [R] lattice xscale.components: different ticks on top/bottom axis

2011-04-01 Thread Deepayan Sarkar
On Fri, Mar 11, 2011 at 12:28 AM,  boris.vasil...@forces.gc.ca wrote:
 Good afternoon,

 I am trying to create a plot where the bottom and top axes have the same
 scale but different tick marks.  I tried user-defined xscale.component
 function but it does not produce desired results.  Can anybody suggest
 where my use of xscale.component function is incorrect?

 For example, the code below tries to create a plot where horizontal axes
 limits are c(0,10), top axis has ticks at odd integers, and bottom axis
 has ticks at even integers.

 library(lattice)

 df - data.frame(x=1:10,y=1:10)

 xscale.components.A - function(...,user.value=NULL) {
  # get default axes definition list; print user.value
  ans - xscale.components.default(...)
  print(user.value)

  # start with the same definition of bottom and top axes
  ans$top - ans$bottom

  # - bottom labels
  ans$bottom$labels$at - seq(0,10,by=2)
  ans$bottom$labels$labels - paste(B,seq(0,10,by=2),sep=-)

  # - top labels
  ans$top$labels$at - seq(1,9,by=2)
  ans$top$labels$labels - paste(T,seq(1,9,by=2),sep=-)

  # return axes definition list
  return(ans)
 }

 oltc - xyplot(y~x,data=df,

 scales=list(x=list(limits=c(0,10),at=0:10,alternating=3)),
               xscale.components=xscale.components.A,
               user.value=1)
 print(oltc)

 The code generates a figure with incorrectly placed bottom and top
 labels.  Bottom labels B-0, B-2, ... are at 0, 1, ... and top labels
 T-1, T-3, ... are at 0, 1, ...  When axis-function runs out of
 labels, it replaces labels with NA.

 It appears that lattice uses top$ticks$at to place labels and
 top$labels$labels for labels.  Is there a way to override this behaviour
 (other than to expand the labels$labels vector to be as long as
 ticks$at vector and set necessary elements to )?

Well, top|bottom$ticks$at is used to place the ticks, and $labels$at
is used to place the labels. They should typically be the same, but
you have changed one and not the other. Everything seems to work if
you set $ticks$at to the same values as $labels$at:


##  - bottom labels
+   ans$bottom$ticks$at - seq(0,10,by=2)
ans$bottom$labels$at - seq(0,10,by=2)
ans$bottom$labels$labels - paste(B,seq(0,10,by=2),sep=-)

##  - top labels
+   ans$top$ticks$at - seq(1,9,by=2)
ans$top$labels$at - seq(1,9,by=2)
ans$top$labels$labels - paste(T,seq(1,9,by=2),sep=-)


 Also, can user-parameter be passed into xscale.components() function?
 (For example, locations and labels of ticks on the top axis).  In the
 code above, print(user.value) returns NULL even though in the xyplot()
 call user.value is 1.

No. Unrecognized arguments are passed to the panel function only, not
to any other function. However, you can always define an inline
function:

oltc - xyplot(y~x,data=df,
   scales=list(x=list(limits=c(0,10), at = 0:10, alternating=3)),
   xscale.components = function(...)
xscale.components.A(..., user.value=1))

Hope that helps (and sorry for the late reply).

-Deepayan

__
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.


Re: [R] lattice xscale.components: different ticks on top/bottom axis

2011-04-01 Thread Boris.Vasiliev

 On Fri, Mar 11, 2011 at 12:28 AM,  
 boris.vasil...@forces.gc.ca wrote:
  Good afternoon,
 
  I am trying to create a plot where the bottom and top axes have the 
  same scale but different tick marks.  I tried user-defined 
  xscale.component function but it does not produce desired results.  
  Can anybody suggest where my use of xscale.component 
  function is incorrect?
 
  For example, the code below tries to create a plot where horizontal 
  axes limits are c(0,10), top axis has ticks at odd integers, and 
  bottom axis has ticks at even integers.
 
  library(lattice)
 
  df - data.frame(x=1:10,y=1:10)
 
  xscale.components.A - function(...,user.value=NULL) {
   # get default axes definition list; print user.value
   ans - xscale.components.default(...)
   print(user.value)
 
   # start with the same definition of bottom and top axes
   ans$top - ans$bottom
 
   # - bottom labels
   ans$bottom$labels$at - seq(0,10,by=2)
   ans$bottom$labels$labels - paste(B,seq(0,10,by=2),sep=-)
 
   # - top labels
   ans$top$labels$at - seq(1,9,by=2)
   ans$top$labels$labels - paste(T,seq(1,9,by=2),sep=-)
 
   # return axes definition list
   return(ans)
  }
 
  oltc - xyplot(y~x,data=df,
 
  scales=list(x=list(limits=c(0,10),at=0:10,alternating=3)),
                xscale.components=xscale.components.A,
                user.value=1)
  print(oltc)
 
  The code generates a figure with incorrectly placed bottom and top 
  labels.  Bottom labels B-0, B-2, ... are at 0, 1, ... and top 
  labels T-1, T-3, ... are at 0, 1, ...  When axis-function runs out 
  of labels, it replaces labels with NA.
 
  It appears that lattice uses top$ticks$at to place labels and 
  top$labels$labels for labels.  Is there a way to override this 
  behaviour (other than to expand the labels$labels vector to be as 
  long as ticks$at vector and set necessary elements to )?
 
 Well, top|bottom$ticks$at is used to place the ticks, and 
 $labels$at is used to place the labels. They should typically 
 be the same, but you have changed one and not the other. 
 Everything seems to work if you set $ticks$at to the same 
 values as $labels$at:
 
 
 ##  - bottom labels
 +   ans$bottom$ticks$at - seq(0,10,by=2)
 ans$bottom$labels$at - seq(0,10,by=2)
 ans$bottom$labels$labels - paste(B,seq(0,10,by=2),sep=-)
 
 ##  - top labels
 +   ans$top$ticks$at - seq(1,9,by=2)
 ans$top$labels$at - seq(1,9,by=2)
 ans$top$labels$labels - paste(T,seq(1,9,by=2),sep=-)
 
 
  Also, can user-parameter be passed into xscale.components() 
  function? (For example, locations and labels of ticks on the top 
  axis).  In the  code above, print(user.value) returns NULL even 
  though in the xyplot() call user.value is 1.
 
 No. Unrecognized arguments are passed to the panel function 
 only, not to any other function. However, you can always 
 define an inline
 function:
 
 oltc - xyplot(y~x,data=df,
scales=list(x=list(limits=c(0,10), at = 0:10, 
alternating=3)),
xscale.components = function(...) 
xscale.components.A(..., user.value=1))
 
 Hope that helps (and sorry for the late reply).
 
 -Deepayan
 

Deepyan,

Thank you very much for your reply.  It makes things a bit clearer.  

It other words in the list prepared by xscale.components(), vectors 
top|bottom$ticks$at and top|bottom$labels$at must be the same.  If only 
every second tick is to be labelled then every second label should be set 
explicitly to empty strings:

  ans$bottom$ticks$at - seq(0,10,by=1)
  ans$bottom$labels$at - seq(0,10,by=1)
  ans$bottom$labels$labels - paste(B,seq(0,10,by=1),sep=-)
  # replace  B-1, B-3, ... with 
  ans$bottom$labels$labels[seq(2,11,by=2)] - 

Sincerely,
Boris.

__
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.


[R] lattice xscale.components: different ticks on top/bottom axis

2011-03-10 Thread Boris.Vasiliev
Good afternoon,

I am trying to create a plot where the bottom and top axes have the same
scale but different tick marks.  I tried user-defined xscale.component
function but it does not produce desired results.  Can anybody suggest
where my use of xscale.component function is incorrect?

For example, the code below tries to create a plot where horizontal axes
limits are c(0,10), top axis has ticks at odd integers, and bottom axis
has ticks at even integers.

library(lattice)

df - data.frame(x=1:10,y=1:10)

xscale.components.A - function(...,user.value=NULL) {
  # get default axes definition list; print user.value
  ans - xscale.components.default(...)
  print(user.value)

  # start with the same definition of bottom and top axes
  ans$top - ans$bottom
  
  # - bottom labels
  ans$bottom$labels$at - seq(0,10,by=2)
  ans$bottom$labels$labels - paste(B,seq(0,10,by=2),sep=-)

  # - top labels
  ans$top$labels$at - seq(1,9,by=2)
  ans$top$labels$labels - paste(T,seq(1,9,by=2),sep=-)

  # return axes definition list
  return(ans)
}

oltc - xyplot(y~x,data=df,
 
scales=list(x=list(limits=c(0,10),at=0:10,alternating=3)),
   xscale.components=xscale.components.A,
   user.value=1)
print(oltc)

The code generates a figure with incorrectly placed bottom and top
labels.  Bottom labels B-0, B-2, ... are at 0, 1, ... and top labels
T-1, T-3, ... are at 0, 1, ...  When axis-function runs out of
labels, it replaces labels with NA.

It appears that lattice uses top$ticks$at to place labels and
top$labels$labels for labels.  Is there a way to override this behaviour
(other than to expand the labels$labels vector to be as long as
ticks$at vector and set necessary elements to )?

Also, can user-parameter be passed into xscale.components() function?
(For example, locations and labels of ticks on the top axis).  In the
code above, print(user.value) returns NULL even though in the xyplot()
call user.value is 1.

Sincerely,
Boris Vasiliev.




 

__
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.