【问题标题】:Interactive correlation matrix交互相关矩阵
【发布时间】:2017-03-10 07:36:08
【问题描述】:

我想在某种意义上绘制相关矩阵,它应该是交互式的,并在 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”值。

谁能帮忙?

【问题讨论】:

  • 第一步,您可以尝试将mtlrmtlp这两个data.frames合并为一个。在包dplyr 中查找merge() 函数或_join() 函数。
  • 合并值不是问题。 rt

标签: r ggplot2 plotly


【解决方案1】:

您可以将您的 p 值添加为 labeltext,然后它们将出现在您的悬停文本中。

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)

【讨论】:

  • 谢谢。你解决了我的问题。我只是稍作修改,得到了更好的结果。
【解决方案2】:

最简单的方法是将两个融合的 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)

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 2019-01-30
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多