Hi Karl,

There's no official way to do it, but you can "hack" the colour
gradient scale to do what you want:

x=-10:10
y=-10:10
dat=expand.grid(x=x,y=y)
dat$z=dat$x^2+dat$y^2-100

# Create a modified scale
gr <- scale_fill_gradient2()$clone()
gr$breaks <- function(.) seq(-100, 100, by=10)

ggplot(dat, mapping=aes(x=x, y=y, fill=z)) +
 geom_tile() + gr

# Or to use the range of the scale if you don't want to set it by hand
gr$breaks <- function(.) seq(.$frange()[1], .$frange()[2], length=10)

This works because ggplot2 is built on top of the proto library and
has mutable objects.  Most of the time you don't notice this because
the default functions operate with R's copy-on-modify semantics.

Hadley

On 7/13/07, Karl Ove Hufthammer <[EMAIL PROTECTED]> wrote:
> A seemingly simple problem has me stumped. Is it possible to choose the
> number of colour breaks for a gradient scale in the current version of
> ggplot2?
>
> Here is a simple example:
>
> ---------------------------------------------
> x=-10:10
> y=-10:10
> dat=expand.grid(x=x,y=y)
> dat$z=dat$x^2+dat$y^2-100
>
> ggplot(dat, mapping=aes(x=x, y=y, fill=z)) +
>   geom_tile() + scale_fill_gradient2()
> ---------------------------------------------
>
> The image shows many (61) colours, but only 5 of them are shown in the
> legend. How do I change the legend to show, say, 10 colours?
>
>
> --
> Karl Ove Hufthammer
>
> ______________________________________________
> [email protected] 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.
>

______________________________________________
[email protected] 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