2017-03-16 45 views
0

我有要繪製爲熱圖此熔融的基體,與在較低的矩陣相關係數和P值在上部三角形改變顏色只在GGPLOT2熱圖的上三角矩陣

> melted_corfinal 
    Var1 Var2 value 
1  iHS iHS 1.00 
2  nSL iHS 0.89 
3 XP-EHH iHS 0.01 
4  PBS iHS 0.00 
5  iHS nSL 0.00 
6  nSL nSL 1.00 
7 XP-EHH nSL 0.01 
8  PBS nSL 0.00 
9  iHS XP-EHH 0.00 
10 nSL XP-EHH 0.00 
11 XP-EHH XP-EHH 1.00 
12 PBS XP-EHH 0.18 
13 iHS PBS 0.90 
14 nSL PBS 0.41 
15 XP-EHH PBS 0.00 
16 PBS PBS 1.00 

但是,我找不到只改變上三角矩陣的顏色,同時保持值的方法。我希望它只是白色(背景)。

下面是我想出迄今代碼:

p <- ggplot(melted_corfinal, aes(Var2, Var1)) + 
    geom_tile(aes(fill = value)) + 
    geom_text(aes(label = round(value, 2))) + 
    scale_fill_continuous("",limits=c(0, 1), breaks=seq(0,1,by=0.2),low = "#fee8c8", high = "#e34a33") + 
    theme_light() + theme(legend.position="none",axis.title.x = element_blank(),axis.title.y = element_blank()) + 
    guides(fill = guide_colorbar(barwidth = 20)) + 
    ylim(rev(levels(melted_corfinal$Var1))) + xlim(levels(melted_corfinal$Var2)) 

plot(p) 

而且,我還是想保留2位小數存在於表,但他們是「四捨五入」時,他們都爲零。 dput:

structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("iHS", "nSL", 
"XP-EHH", "PBS"), class = "factor"), Var2 = structure(c(1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("iHS", 
"nSL", "XP-EHH", "PBS"), class = "factor"), value = c(1, 0.89, 
0.01, 0, 0, 1, 0.01, 0, 0, 0, 1, 0.18, 0.9, 0.41, 0, 1)), .Names = c("Var1", 
"Var2", "value"), row.names = c(NA, -16L), class = "data.frame") 
+0

參見:http://pseudofish.com/triangle-heatmaps-in-r-using-ggplot.html – Djork

+0

我認爲只是將上三角形的值變成了「NA」,並且沒有繪製並因此是白色的,但是在這裏我仍然**想要保留這些值。編輯我的問題,以便更清楚。 – GabrielMontenegro

+1

您可以創建2組值,其中一個值由geom_tile的NA替換,另一個值保存爲geom_text。 – Djork

回答

2

好吧首先我轉換回常規的未熔融基質您提供的數據,所以我可以很容易地設置爲NA的上三角。我用dcast這樣做。該矩陣已經是對角線和下三角形上的相關性以及上三角形上的p值的組合。

melted_corfinal <- structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), 
                .Label = c("iHS", "nSL", "XP-EHH", "PBS"), class = "factor"), 
            Var2 = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), 
                .Label = c("iHS", "nSL", "XP-EHH", "PBS"), class = "factor"), 
            value = c(1, 0.89, 0.01, 0, 0, 1, 0.01, 0, 0, 0, 1, 0.18, 0.9, 0.41, 0, 1)), 
          .Names = c("Var1", "Var2", "value"), row.names = c(NA, -16L), class = "data.frame") 

cor_pval <- dcast(melted_corfinal, Var1~Var2)[, -1] 
# Set to NA upper triangle excluding diagonal 
cor_pval[upper.tri(cor_pval, diag=F)] <- NA 

我再熔化本和第二個值添加到melted_corfinal

cor_pval_col <- melt(cor_pval) 
melted_corfinal$value2 <- cor_pval_col$value 
melted_corfinal 

現在我們畫出你有,但geom_tile我們使用value2與NA的p值。然後,我們在scale_fill_continuous中設置na.value="white"

終於搞定了2 0的signif數字我用format

p <- ggplot(melted_corfinal, aes(Var2, Var1)) + 
    geom_tile(aes(fill = value2)) + 
    scale_fill_continuous("",limits=c(0, 1), breaks=seq(0,1,by=0.2), low = "#fee8c8", high = "#e34a33", na.value = "white") + 
    geom_text(aes(label = format(value, nsmall=2))) + 
    theme_light() + theme(legend.position="none",axis.title.x = element_blank(),axis.title.y = element_blank()) + 
    guides(fill = guide_colorbar(barwidth = 20)) + 
    ylim(rev(levels(melted_corfinal$Var1))) + xlim(levels(melted_corfinal$Var2)) 
p 

enter image description here

+1

你也可以使用'subset(melted_corfinal,as.integer(Var1)> = as.integer(Var2))'來排除上面的三角形,並直接在geom中使用。是更簡潔,只使用基地R – GGamba

+0

我剛剛用更簡單的子集upvote你的答案,但你刪除它(它消失在我面前)!感謝您的建議,這是一個很好的:) – Djork