2012-04-19 18 views
9

Interesuje mnie budowa mapy cieplnej z geom_tile w ggplot2, która wykorzystuje inny gradient wysokiego koloru w oparciu o współczynnik.geom_tile heatmap z różnymi wysokimi kolorami wypełnienia w oparciu o czynnik

Poniższy wykres tworzy wykres, na którym poszczególne kafelki mają kolor niebieski lub czerwony w oparciu o xy_type, ale nie ma gradientu.

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

Działka poniżej nie używa współczynnika xy_type, aby wybrać kolor, ale mam jeden gradientu grupy w oparciu o xy_avg_value.

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

Czy istnieje technika łączenia tych dwóch powierzchni? Mogę użyć facet_grid(xy_type ~ .), aby utworzyć osobne wykresy tych danych z gradientem. Ponieważ ostatecznie będzie to mapa (współrzędne X ~ Y), chciałbym znaleźć sposób na wyświetlanie różnych gradientów na jednej mapie geom_tile.

Odpowiedz

16

Ogólnie ggplot2 nie dopuszcza wiele skali, jednego typu (to znaczy wiele kolorów lub wypełnienia wag), więc podejrzewać, że tak nie jest (łatwo) możliwe.

Najlepszym najbliższy przybliżenie mogę wymyślić to:

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

Ale to będzie trudne do uzyskania sensownej legendę.

+0

To rozwiązuje problem idealnie do mojego użytku. Podwójna legenda jest dość łatwa do przeczytania w mojej aplikacji. Dzięki za pomoc! – Michael

Powiązane problemy