2017-11-08 3 views
1

Ich habe einen Datensatz, der einige fehlende Werte für die x-Variable enthält. Zum Beispiel zeigt der folgende Datenrahmen 181930 und 610 einen vollständigen Satz von x Variablen, 1-7, während 1044, 1114 usw. nur einen haben.So ändern Sie die Füllfarbe von leeren Zellen in ggplot Heatmap

label xvar value 
181930 1 0 
181930 2 0 
181930 3 1 
181930 4 0 
181930 5 0 
181930 6 0 
181930 7 1 
610 1 0 
610 2 0 
610 3 0 
610 4 0 
610 5 1 
610 6 1 
610 7 0 
1044 1 0 
1114 1 0 
1156 1 1 
1378 1 0 
1834 1 1 

Ich mag würde eine Heatmap mit ggplot zeigt Zellen zu erzeugen, die Werte von 1 haben Dies ist mein Code so weit, aber für die Etiketten mit nur einer xvar eine leere Zelle zeigt und eher würde ich es gerne eine Farbe (weiß) haben, um den 0 Werten zu entsprechen.

ggplot(activeDF,aes(xvar,factor(label)))+ 
    geom_tile(aes(fill=value),colour='white')+ 
    scale_x_continuous(breaks=round(seq(0,7)))+ 
    scale_fill_gradient(high=brewer.pal(10,'PiYG')[8],low='white',na.value = 'white') 

Leider funktionierte der na.value nicht für mich. Hier ist ein Foto: plot

Antwort

2

manchmal die einfachen Ansatz zu tun, etwas in ggplot2 ist Ihr Datensatz zu manipulieren vor Plotten. In diesem Fall ist es eine Option, das Dataset so zu erweitern, dass es alle Kombinationen enthält, die Sie darstellen möchten.

Ich benutze für diese zusammen mit der Gruppierung aus Paket dplyr. Dies fügt eine Zeile für xvar von 1 bis 7 für jeden label hinzu. Wenn die Zeile derzeit nicht existiert, füllt sie fehlende Werte mit NA aus. NA scheint für Ihren Anwendungsfall ausreichend, aber Sie können auch das fill Argument verwenden, um die fehlenden Werte auf 0 oder etwas festzulegen.

library(dplyr) 
library(tidyr) 

longdf = activeDF %>% 
    group_by(label) %>% 
    complete(xvar = 1:7) 

longdf 

# A tibble: 49 x 3 
# Groups: label [7] 
    label xvar value 
    <int> <int> <int> 
1 610  1  0 
2 610  2  0 
3 610  3  0 
4 610  4  0 
5 610  5  1 
6 610  6  1 
7 610  7  0 
8 1044  1  0 
9 1044  2 NA 
10 1044  3 NA 
# ... with 39 more rows 

Mit dem erweiterten Datensatz Ihr Grundstück erweitert nun durch den gesamten Bereich der Daten und damit die Kacheln abgeschlossen ist.

ggplot(longdf, aes(xvar, factor(label))) + 
    geom_tile(aes(fill = value), colour = 'black') + 
    scale_x_continuous(breaks = round(seq(0, 7))) + 
    scale_fill_gradient(high = brewer.pal(10, 'PiYG')[8], low='white', na.value = 'white') 

enter image description here

+0

Großartig, das hat wunderbar funktioniert. Danke für den Vorschlag! Anstelle des 'scale_fill_gradient' bin ich auf' scale_fill_manual' umgestiegen, da meine Werte 0 oder 1 sind. Allerdings fügt 'ggplot2' einen Legendeneintrag für NA-Werte hinzu. Würdest du zufällig wissen, wie man 'ggplot2' daran hindert, diesen separaten Legendeneintrag hinzuzufügen? Danke im Voraus. –

+0

@SpencerTrinh Sie sollten Ihre 'Breaks' einstellen können, um' NA' aus der Legende zu entfernen. – aosmith

0

versuchen, diese + theme(panel.background = element_rect(fill = 'white'))

ggplot(activeDF,aes(xvar,factor(label)))+ 
geom_tile(aes(fill=value),colour='white')+ 
scale_x_continuous(breaks=round(seq(0,7)))+ 
scale_fill_gradient(high=brewer.pal(10,'PiYG')[8],low='white',na.value = 'white') + 
theme(panel.background = element_rect(fill = 'white')) 
+0

Dank für Vorschlag. es funktionierte jedoch, wenn ich die Umrissfarbe zu schwarz ändern möchte, um jede Zelle klar zu sehen, wie kann ich das erreichen? Ich habe "color = 'black'" für 'geom_tile' geändert, aber ich stoße auf ein ähnliches Problem, bei dem die leeren leeren Zellen keinen Umriss haben. –

Verwandte Themen