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", "#FF0000")

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 <deepayan.sar...@r-project.org> wrote:
> On Tue, May 18, 2010 at 6:32 PM, baptiste auguie
> <baptiste.aug...@googlemail.com> 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.

Reply via email to