Re: [R] lattice::panel.levelplot.raster too picky with unequal spacing

2010-06-05 Thread baptiste auguie
Hi again,

Another thought on this new function. Would it be possible to adapt
the colour scale in the legend to use grid.raster as well, so that
when the panel performs a smooth interpolation the legend also does
the same? It's particularly clear when saving as a pdf, where viewer
artifacts create spurious and visually unpleasant white bands between
the different colour levels.

I wrote a function for another package that may be useful here,

colorStrip <-
  function (fill = 1:3, colour = fill, draw = TRUE, raster = FALSE,
direction = c("vertical", "horizontal"))
{

  fill.numeric <- is.numeric(fill)
  fill[fill.numeric] <- rgb(t(col2rgb(fill[fill.numeric])), maxColorValue=255)

  direction <- match.arg(direction)

  my.grob <- if (raster) {

fillm <- switch(direction,
"horizontal" = matrix(fill, nrow = 1),
"vertical" =  matrix(fill, ncol = 1))

rasterGrob(fillm, x = unit(0.5, "npc"),
   y = unit(0.5, "npc"), width = unit(1, "npc"),
   height = unit(1, "npc"), just = "centre",
   hjust = NULL, vjust = NULL,
   interpolate = TRUE, default.units = "npc", name = NULL,
   gp = gpar(), vp = NULL)
} else {
positions <- cbind(seq(0 + 0.5/length(fill),
   1 - 0.5/length(fill), length = length(fill)),
   rep(0.5, length(fill)),
   1/length(fill), 1)

xy <- switch(direction,
 "horizontal" = positions[, 1:4],
 "vertical" =  positions[, c(2:1, 4:3)])

grid.rect(x = unit(xy[, 1], "npc"), y = unit(xy[, 2], "npc"),
  width = unit(xy[, 3], "npc"),
  height = unit(xy[, 4], "npc"), just = "center",
  hjust = NULL, vjust = NULL, default.units = "npc",
  name = NULL, gp = gpar(fill = fill, col = colour),
  draw = FALSE, vp = NULL)
  }
  if (draw)
grid.draw(my.grob)

  my.grob
}

# testing
cols <- c("#4C00F0", "#0046EC", "#00E2BF", "#00FF00", "#00FF00",
"#92E500", "#FFA100", "#FF3100", "#FF")

pdf("colortest.pdf")
colorStrip(cols, raster=T, direction="vertical")
grid.newpage()
colorStrip(cols, raster=F, direction="vertical")
grid.newpage()
colorStrip(cols, raster=T, direction="horizontal")
grid.newpage()
colorStrip(cols, raster=F, direction="horizontal")
dev.off()


Best,

baptiste

On 18 May 2010 15:30, Deepayan Sarkar  wrote:
> On Tue, May 18, 2010 at 6:32 PM, baptiste auguie
>  wrote:
>> Dear all,
>>
>> I got a couple of warnings using panel.levelplot.raster,
>>
>> In panel.levelplot.raster(..., interpolate = TRUE) :
>>  'y' values are not equispaced; output will be wrong
>>
>> although I was quite sure my data were equally spaced (indeed, I
>> created them with seq()). A closer look at the source code reveals
>> that the function tests for exact uniformity in grid spacing,
>>
>>  if (length(unique(diff(uy))) != 1)
>>            warning("'x' values are not equispaced; output will be wrong")
>
> Maybe a better test would be
>
> isTRUE(all.equal(diff(range(diff(ux))), 0))
>
> I'll try that out for the next release.
>
> -Deepayan
>
>>
>> The following dummy example would suggest that a strict equality is
>> not always suitable,
>>
>> x <- seq(0, 50, length=100)
>> ux <- sort(unique(x[!is.na(x)]))
>> length(unique(diff(ux)))
>> # 8
>> sd(unique(diff(ux)))
>> #  2.462951e-15
>>
>> Suggestions / comments are welcome.
>>
>> Best regards,
>>
>> baptiste
>>
>>
>> sessionInfo()
>> R version 2.11.0 RC (2010-04-16 r51754)
>> i386-apple-darwin9.8.0
>>
>> locale:
>> [1] en_GB.UTF-8/en_GB.UTF-8/C/C/en_GB.UTF-8/en_GB.UTF-8
>>
>> attached base packages:
>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>
>> other attached packages:
>> [1] lattice_0.18-5
>>
>> loaded via a namespace (and not attached):
>> [1] grid_2.11.0  tools_2.11.0
>>
>>
>>
>> --

__
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::panel.levelplot.raster too picky with unequal spacing

2010-05-18 Thread baptiste auguie
On 18 May 2010 15:30, Deepayan Sarkar  wrote:

> Maybe a better test would be
>
> isTRUE(all.equal(diff(range(diff(ux))), 0))
>
> I'll try that out for the next release.
>


Sounds good (and works for me), thanks.

baptiste

__
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::panel.levelplot.raster too picky with unequal spacing

2010-05-18 Thread Deepayan Sarkar
On Tue, May 18, 2010 at 6:32 PM, baptiste auguie
 wrote:
> Dear all,
>
> I got a couple of warnings using panel.levelplot.raster,
>
> In panel.levelplot.raster(..., interpolate = TRUE) :
>  'y' values are not equispaced; output will be wrong
>
> although I was quite sure my data were equally spaced (indeed, I
> created them with seq()). A closer look at the source code reveals
> that the function tests for exact uniformity in grid spacing,
>
>  if (length(unique(diff(uy))) != 1)
>            warning("'x' values are not equispaced; output will be wrong")

Maybe a better test would be

isTRUE(all.equal(diff(range(diff(ux))), 0))

I'll try that out for the next release.

-Deepayan

>
> The following dummy example would suggest that a strict equality is
> not always suitable,
>
> x <- seq(0, 50, length=100)
> ux <- sort(unique(x[!is.na(x)]))
> length(unique(diff(ux)))
> # 8
> sd(unique(diff(ux)))
> #  2.462951e-15
>
> Suggestions / comments are welcome.
>
> Best regards,
>
> baptiste
>
>
> sessionInfo()
> R version 2.11.0 RC (2010-04-16 r51754)
> i386-apple-darwin9.8.0
>
> locale:
> [1] en_GB.UTF-8/en_GB.UTF-8/C/C/en_GB.UTF-8/en_GB.UTF-8
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
>
> other attached packages:
> [1] lattice_0.18-5
>
> loaded via a namespace (and not attached):
> [1] grid_2.11.0  tools_2.11.0
>
>
>
> --
> 
>
> Baptiste Auguié
>
> Departamento de Química Física,
> Universidade de Vigo,
> Campus Universitario, 36310, Vigo, Spain
>
> tel: +34 9868 18617
> http://webs.uvigo.es/coloides
> 
>
>

__
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::panel.levelplot.raster too picky with unequal spacing

2010-05-18 Thread baptiste auguie
Dear all,

I got a couple of warnings using panel.levelplot.raster,

In panel.levelplot.raster(..., interpolate = TRUE) :
  'y' values are not equispaced; output will be wrong

although I was quite sure my data were equally spaced (indeed, I
created them with seq()). A closer look at the source code reveals
that the function tests for exact uniformity in grid spacing,

 if (length(unique(diff(uy))) != 1)
warning("'x' values are not equispaced; output will be wrong")

The following dummy example would suggest that a strict equality is
not always suitable,

x <- seq(0, 50, length=100)
ux <- sort(unique(x[!is.na(x)]))
length(unique(diff(ux)))
# 8
sd(unique(diff(ux)))
#  2.462951e-15

Suggestions / comments are welcome.

Best regards,

baptiste


sessionInfo()
R version 2.11.0 RC (2010-04-16 r51754)
i386-apple-darwin9.8.0

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/C/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats graphics  grDevices utils datasets  methods   base

other attached packages:
[1] lattice_0.18-5

loaded via a namespace (and not attached):
[1] grid_2.11.0  tools_2.11.0



-- 


Baptiste Auguié

Departamento de Química Física,
Universidade de Vigo,
Campus Universitario, 36310, Vigo, Spain

tel: +34 9868 18617
http://webs.uvigo.es/coloides

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