2017-09-18 2 views
3

Ici, j'ai deux «clusters», et une seule légende. Comment puis-je obtenir deux légendes «densité» avec deux dégradés de couleurs différents?Dans ggplot, comment puis-je obtenir deux légendes (type "gradient") pour stat_bin2d?

J'ai essayé group mais cela ne fonctionne pas.

enter image description here

Le code suivant a généré le graphique ci-dessus:

library(ggplot2) 

df <- data.frame(x=c(rnorm(1000,1,.1),rnorm(1000,3,.1)), 
       y=c(rnorm(1000,1,1),rnorm(1000,3,1)), 
       type=c(rep('a',1000),rep('b',1000))) 

plot(ggplot(df) + 
     stat_bin2d(aes(x,y,fill=..density..,group='type'))) 

Répondre

3

Je ne suis pas au courant d'un moyen de spécifier plus d'un gradient de remplissage. Mais voici un travail autour qui utilise différents niveaux de transparence pour simuler le gradient, en laissant remplir à la disposition être mis en correspondance avec le type:

ggplot(df, aes(x, y, fill = type)) + 
    stat_bin2d(aes(alpha = ..density..)) + 
    scale_alpha(range = c(1, 0.1)) + 
    theme_bw() 

different colours

+0

À mon avis, il y a un problème subtil avec le graphique: densité la plus élevée sont mappé au blanc (ou, au moins, à une couleur très «pâle») mais aussi l'arrière-plan du graphique est blanc! Je pense qu'un fond noir résoudrait le problème. –

+1

@AlessandroJacopson Pour inverser l'échelle alpha, vous pouvez rétablir la plage 'c (0,1, 1)'. (J'essayais d'imiter la plage de lumière sombre du gradient de remplissage.) –

3

En utilisant alpha = ..density.. le tour est joué:

ggplot(df, aes(x = x, y = y)) + 
    stat_bin2d(mapping= aes(alpha = ..density.., fill = type)) 

enter image description here

Un peu plus en utilisant esthétiquement stat_density2d e .g .:

ggplot(df, aes(x=x, y=y)) + 
    stat_density2d(mapping= aes(alpha = ..level.., color= type), geom="contour", bins=6, size= 2) 

enter image description here