2013-07-23 8 views
13

Używam gplot do wytworzenia mapy cieplnej pokazującej log-krotnie zmiany w grupach leczenia w porównaniu z kontrolami sparowanymi. Z następującego kodu:Jak zmienić zakres kolorów heatmap.2 w R?

heatmap.2(as.matrix(SeqCountTable), col=redgreen(75), 
      density.info="none", trace="none", dendrogram=c("row"), 
      symm=F,symkey=T,symbreaks=T, scale="none") 

ja wyjściowego mapa ciepła ze zmianą wartości rzeczywistym zagięcia (tj, wynik nie Row-Z), który jest co jestem po, w systemie czerwono-czarno-zielony kolor, który jest ulubieniec każdego biologa!

http://i.stack.imgur.com/uhFbP.jpg

Rzeczywisty zakres zmian log2-fold -3/+ 7 z wielu wartości w -2 i -1/+ 1/+ 2, która postać ciemnych czerwony/zielony (odpowiednio). To sprawia, że ​​cała mapa cieplna jest dość ciemna i tak trudna do zinterpretowania.

  • Czy istnieje sposób na pochylenie gradientu kolorów, aby uczynić go mniej liniowym? To znaczy, że gradient od czerni do dość jasnego występuje w mniejszym zakresie?
  • I/lub zmienić zakres kolorów tak, aby był asymetryczny, tj., Aby był uruchamiany z -3/+ 7, jak dane, a nie -7/+ 7 jak obecnie, z czarną nadal wycentrowaną na zero?
+6

Proszę nie używać schematu czerwono-zielonego we wszystkim, co ma być pokazane innej osobie. 8% mężczyzn i 0,5% kobiet cierpi na upośledzenie kolorów i będzie miało problemy z odczytaniem mapy termicznej. http: // designshack.net/articles/accessibility/tips-for-designing-for-colorblind-users/ – January

Odpowiedz

11

Można spróbować stworzyć własną paletę kolorów przy użyciu pakietu

my_palette <- colorRampPalette(c("green", "black", "red"))(n = 1000) 

RColorBrewer i zobaczyć, jak to wygląda. Ale przypuszczam, że w twoim przypadku tylko skalowanie mogłoby pomóc, jeśli naprawdę chcesz zachować czerń w "środku". możesz po prostu użyć my_palette zamiast redgreen()

to polecam zapoznać się z RColorBrewer package, mają bardzo ładne wbudowany palet i zobaczyć interaktywną website for colorbrewer.

+0

tylko z twoim kodem, klucz koloru pozostaje pusty – Woeitg

+0

To działało dla mnie wtedy, musiałbyś użyć tej palety kolorów jako argumentu funkcji Oczywiście ('col = my_palette') – Sebastian

11

mam gamę kolorów, aby być asymetryczne po prostu zmieniając argument symkey do fałszywych

symm=F,symkey=F,symbreaks=T, scale="none" 

rozwiązano kwestię koloru z colorRampPalette z argumentem przerwy, aby określić zakres każdego koloru, na przykład

colors = c(seq(-3,-2,length=100),seq(-2,0.5,length=100),seq(0.5,6,length=100)) 

my_palette <- colorRampPalette(c("red", "black", "green"))(n = 299) 

sumie

heatmap.2(as.matrix(SeqCountTable), col=my_palette, 
    breaks=colors, density.info="none", trace="none", 
     dendrogram=c("row"), symm=F,symkey=F,symbreaks=T, scale="none") 
+0

To, co mylę, to to, że po zmianie nierównoległych podziałów dla różnych kolorów, trudno byłoby wytłumaczyć wynik mapy cieplnej, prawda? ponieważ nie są one jednakowo ciągłe? –

+0

Innym problemem jest to, że jeśli ustawisz kolory w ten sposób, klucz wydaje się być zawsze nienormalny (nie jest pokazany w górnej części figury mapy cieplnej). Czy masz taki problem wcześniej? –

0

myślę, że trzeba ustawić symbreaks = FALSE To powinno pozwolić na asymetrycznych skali kolorów.

0

Oto kolejna opcja dla tych, którzy nie stosując heatmap.2 (aheatmap jest dobry!)

Zrób sekwencyjną wektor 100 wartości od min do max swojej macierzy wejściowej, znajdź wartość najbliższą 0 w które sprawiają, że dwa wektor kolory do i od pożądanego punktu środkowego, łącz i używaj:

breaks <- seq(from=min(range(inputMatrix)), to=max(range(inputMatrix)), length.out=100) 
midpoint <- which.min(abs(breaks - 0)) 
rampCol1 <- colorRampPalette(c("forestgreen", "darkgreen", "black"))(midpoint) 
rampCol2 <- colorRampPalette(c("black", "darkred", "red"))(100-(midpoint+1)) 
rampCols <- c(rampCol1,rampCol2)