2017-03-10 201 views
0

我想繪製相關矩陣,它應該是交互式的,並在ggplot2或plot_ly中顯示相關值和相應的p值。交互相關矩陣

我試過下面的代碼。

library(ggplot2) 
    library(plotly) 
    library(reshape) 
    library(Hmisc) 

    x <- Seatbelts 
    y <- as.matrix(x) 
    rt <- rcorr(y) 
    mtlr <- melt(rt$r) 
    mtlp <- melt(rt$P) 
    gx <- ggplot(mtl, aes(X1, X2, fill = value)) + geom_tile() + 
     scale_fill_gradient(low = "cyan", high = "red") 
    ggplotly(gx) 

我想在同一圖表中顯示「mtlp」值。

任何人都可以幫忙嗎?

+0

作爲第一個步驟中,您可以嘗試兩個data.frames合併'mtlr'and 'mtlp'合爲一體。在包'dplyr'中查找'merge()'函數或'_join()'函數。 – ottlngr

+0

它不是合併值的問題。 rt < - rcorr(y)已包含兩個數據幀。問題是當我將光標懸停在單個單元格中時,我可以如何調用這兩個值(相關性和p值)。 –

回答

1

您可以將您的p值作爲labeltext添加,然後將顯示在您的文本中。

enter image description here

library(ggplot2) 
library(plotly) 
library(reshape) 
library(Hmisc) 

x <- Seatbelts 
y <- as.matrix(x) 
rt <- rcorr(y) 
mtlr <- melt(rt$r) 
mtlp <- melt(rt$P) 
p.value <- mtlp$value 
gx <- ggplot(mtlr, aes(X1, X2, fill = value, label=p.value)) + geom_tile() + 
    scale_fill_gradient(low = "cyan", high = "red") 
ggplotly(gx) 
+0

謝謝。你解決了我的問題。我只是修改了一下,得到了一個更好的結果。 –

1

最簡單的方法是將兩個熔化的data.frames合併到一起,然後使用text審美添加到工具提示。

我重新做了使用reshape2(而不是reshape)與設定值的名稱,使合併的熔體容易

mtlr <- melt(rt$r, value.name = "Correlation") 
mtlp <- melt(rt$P, value.name = "P-Value") 

mtl <- 
    merge(mtlr, mtlp) 

然後,使情節 - 請注意,你可以使用任何你想要的text審美,我經常用它來改變工具提示的佈局/演示文稿(然後只顯示text提示)

gx <- 
    ggplot(mtl 
     , aes(Var1, Var2 
       , fill = Correlation 
       , text = paste("P-val = ", round(`P-Value`, 4)))) + 
    geom_tile() + 
    scale_fill_gradient(low = "cyan", high = "red") 
ggplotly(gx)