2016-08-03 14 views
1

Ich möchte eine Heatmap von p-Werten mit dem Ergebnis eines paarweisen.wilcox.test erstellen. Also, nach Durchführung des Tests, umformen ich das Ergebnis:Wie man eine schlampige Heatmap anordnet r

test <- pairwise.wilcox.test(world$mean, world$con, p.adjust.method ="bonferroni",conf.level = 0.95) 
test.result <- melt (test[[3]],na.rm=T) 

Das Ergebnis ist folgendes:

 X1  X2  value 
1 europe africa 7.216273e-20 
2 namerica africa 2.694228e-23 
3 samerica africa 1.001953e-01 
4  asia africa 3.515077e-66 
5 europe europe   NA 
6 namerica europe 6.551144e-02 
7 samerica europe 2.615654e-05 
8  asia europe 2.148064e-09 
9 europe namerica   NA 
10 namerica namerica   NA 
11 samerica namerica 4.894171e-10 
12  asia namerica 3.642124e-02 
13 europe samerica   NA 
14 namerica samerica   NA 
15 samerica samerica   NA 
16  asia samerica 5.999172e-25 

Dann laufe ich ein ggplot2 Skript die Heatmap zu erhalten:

test.result$X1 <- factor(test.result$X1, levels = c("europe", "namerica", "samerica", "asia")) 
test.result$X2 <- factor(test.result$X2, levels = c("europe", "namerica", "samerica","asia")) 

test.result$value<-cut(test.result$value, breaks=c(-Inf,0.001,0.05,1),right=F) 

ggplot(data = test.result, aes(X1, X2, fill = value)) + 
    geom_tile(aes(fill=test.result$value),color="white") + 
    scale_fill_brewer(palette="Blues",name="p-Val") 
    theme_minimal() + 
    theme(axis.text.x = element_text(angle = 45, vjust = 1, 
            size = 12, hjust = 1)) + 
    coord_fixed() 

Das Ergebnis ist die folgende Abbildung: enter image description here

Als Sie können sehen, die Figur ist nicht in der Diagonalen sortiert, ist irgendwie schlampig ... Ich weiß nicht, wie man die Figur richtig anordnet, um alle p-Werte in der Diagonalen zu bekommen. Danke für Ihre Hilfe

Die Figur, die ich suche ist wie folgt: enter image description here

+0

Es ist nicht klar, wie soll der erwartete Plot aussehen? – zx8754

+0

Vielleicht habe ich mich nicht richtig erklärt. Ich möchte, dass die Figur in der Diagonale dargestellt wird. Wie eine paarweise Handlung! – Cebs

+0

Ich bekomme immer noch nicht, was Sie wollen.Was willst du auf der Diagonale? – Alex

Antwort

1

Ich denke, das ist, was Sie ?: wollen

Ihre Daten aufrufen tr:

tr = structure(list(X1 = structure(c(2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L), .Label = c("asia", "europe", 
"namerica", "samerica"), class = "factor"), X2 = structure(c(1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("africa", 
"europe", "namerica", "samerica"), class = "factor"), value = c(7.216273e-20, 
2.694228e-23, 0.1001953, 3.515077e-66, NA, 0.06551144, 2.615654e-05, 
2.148064e-09, NA, NA, 4.894171e-10, 0.03642124, NA, NA, NA, 5.999172e-25 
)), .Names = c("X1", "X2", "value"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16")) 

Swarks Kommentar war korrekt, da wir die Faktoren brauchen, um die gleichen Ebenen/die gleiche Reihenfolge zu haben. Der Kommentar hat nicht ganz funktioniert, weil africa weggelassen wurde. Das reparieren:

lev = c("europe", "namerica", "samerica", "asia", "africa") 
tr$X1 <- factor(tr$X1, levels = lev) 
trX2 <- factor(tr$X2, levels = lev) 

Wir können jetzt eine Handlung machen. Einige Korrekturen hier

  1. nie Verwendung data$column innerhalb aes() - unquoted Spaltennamen verwenden.
  2. Wenn Sie fill = value im oberen ggplot() Aufruf angeben, muss es für die Schicht geom_tile() nicht wiederholt werden.
  3. Ihre value scheint kontinuierlich zu sein. scale_fill_brewer impliziert eine diskrete Skala, kann also hier nicht verwendet werden. Es scheint gut ohne, aber Sie könnten auch versuchen scale_fill_distiller.
  4. der Code in Ihrer Frage fehlte ein +.

Dieser Code funktioniert:

ggplot(data = tr, aes(X1, X2, fill = value)) + 
    geom_tile(color = "white") + 
    theme_minimal() + 
    theme(axis.text.x = element_text(
     angle = 45, 
     vjust = 1, 
     size = 12, 
     hjust = 1 
    )) + 
    coord_fixed() 

enter image description here

Beachten Sie auch, dass die genaue Diagonale von 1-en ist hier fehlt (anders als in Ihrem mtcars Beispiel), weil es aus Ihren Daten fehlt. Das heißt, africa ist vollständig von X1 und asia ist vollständig abwesend von X2. Wenn Sie diese Kacheln plotten möchten, müssen Sie Ihre Daten mit diesen Zeilen erweitern.