Thank you, Hadley,

the real example needs scales with more breaks, this is the only
difference.

The script overwrites the original ggplot2 code with the code below to
achive this. 
This was hardcoded for the special case.

Can ggplot2 handle bigger numbers of breaks by reusing aesthetics ?

Bernd


ScaleMy <- proto(ScaleColour, expr={

        new <- function(., name=NULL, palette=1, type="qual", alpha=1,
variable) {
                proto(., name=name, palette=palette, type=type,
.input=variable, .output=variable, .alpha=alpha)
        }
        
  colors <-
c('green','red','blue','violet','orange2','skyblue','magenta','burlywood
1',
 
'cadetblue1','maroon3','aquamarine','bisque1','darkgoldenrod1','darkkhak
i','cornsilk3',
  'lightsalmon1','deepskyblue2','goldenrod1','hotpink','lightslateblue',
  'mistyrose1','olivedrab1','plum1','pink1','orange3')

        breaks <- function(.) {
                n <- length(.$domain())
                alpha(.$colors[1:n
    
    ], .$.alpha)
        }

        
        max_levels <- function(.) length(.$colors)


})

scale_colour_My <- function(...) ScaleMy$new(..., variable = "colour")


Scales$guide_legend <- function(.) {
                legs <- compact(lapply(.$.scales, function(x)
x$guide_legend()))
                legs[sapply(legs, length) == 0] <- NULL
                legs
        }

ScaleShape$breaks <- function(.) {
                (if (.$solid) {
                        c(16, 17, 15, 3, 7, 8, 16, 17, 15, 3, 7, 8, 16,
17, 15, 3, 7, 8)
                } else {
                        c(1, 2, 0, 3, 7, 8, 1, 2, 0, 3, 7, 8, 1, 2, 0,
3, 7, 8)
                })[1:length(.$domain())]
        }

ScaleShape$max_levels <- function(.) 18

 

-----Original Message-----
From: hadley wickham [mailto:[EMAIL PROTECTED] 
Sent: Thursday, February 07, 2008 3:11 PM
To: Engelmann, Bernd
Cc: r-help@r-project.org
Subject: Re: [R] consolidate legends in ggplot2

On Feb 7, 2008 3:43 AM, Engelmann, Bernd <[EMAIL PROTECTED]>
wrote:
> Hello,
>
> the same parameter for colour and shape aesthetics gives 2 legends:
>
> library(ggplot2)
> p <- ggplot(mtcars, aes(x=wt, y=mpg))
> p + geom_point(aes(colour=factor(cyl), shape=factor(cyl)))
>
> Can the 2 legends be consolidated to one with colours and shapes of 
> the symbols matched between legend and plot ?

Not in the current version of ggplot2, but I'm working on that code in
the development version at the moment and it will be included in the
next version.  If your real example is more complicated than that,
please let me know so that I can check if my code works.

Hadley

--
http://had.co.nz/

______________________________________________
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