2012-04-19 5 views
9

Sono interessato a creare una heatmap con geom_tile in ggplot2 che utilizza un diverso colore di alta gradazione in base a un fattore.geom_tile heatmap con diversi colori di riempimento elevati in base al fattore

La trama seguente crea il grafico in cui le singole tessere sono colorate in blu o in rosso in base allo xy_type, ma non c'è gradiente.

ggplot() + 
    geom_tile(data=mydata, aes(x=factor(myx), y=myy, fill=factor(xy_type))) + 
    scale_fill_manual(values=c("blue", "red")) 

La trama di seguito non utilizza il fattore xy_type di scegliere il colore, ma ho una singola sfumatura di gruppo in base alla xy_avg_value.

ggplot() + 
    geom_tile(data=mydata, aes(x=factor(myx), y=myy, fill=xy_avg_value)) 

Esiste una tecnica per fondere questi due grafici? Posso usare un facet_grid(xy_type ~ .) per creare grafici separati di questi dati, con il gradiente. Poiché alla fine si tratta di una mappa (coordinate x ~ y), mi piacerebbe trovare un modo per visualizzare insieme il diverso gradiente in una singola mappa geom_tile.

risposta

16

In generale, ggplot2 non consente più scale di un singolo tipo (cioè più scale di colori o di riempimento), quindi sospetto che ciò non sia (facilmente) possibile.

la migliore approssimazione più vicina che posso venire in mente è questa:

df <- data.frame(expand.grid(1:5,1:5)) 
df$z <- runif(nrow(df)) 
df$grp <- rep(letters[1:2],length.out = nrow(df)) 

ggplot(df,aes(x = Var1,y = Var2,fill = factor(grp),alpha = z)) + 
    geom_tile() + 
    scale_fill_manual(values = c('red','blue')) 

enter image description here

Ma sarà difficile ottenere una leggenda ragionevole.

+0

Questo risolve perfettamente il problema per il mio utilizzo. La doppia leggenda è piuttosto semplice da leggere nella mia applicazione. Grazie per l'aiuto! – Michael