R ggplot巧合情节

时间:2016-09-16 16:51:22

标签: r ggplot2

我正在开发一个有多种疾病的患者数据库,我正在尝试创建一个显示这些疾病之间关联的图形。更具体地说,我想获得如下内容:

enter image description here

我的数据组织为:

<input type="datetime-local" name="pub_date" value="2013-10-09T15:38:15" />

我创建数据,因为我希望它使用以下代码显示:

 mal1 mal2 mal3 etc.
 0    0    1
 1    1    0
 0    1    0 etc.

我用以下内容创建情节:

X <- as.matrix(hdat2)
out <- crossprod(X)   
diag(out) <- 0    

结果我得到了这个情节

enter image description here

我想要隐藏对称的一半,我认为这是误导性的(类似于如何,i相关矩阵我可以隐藏对称的一半)。但是,我不知道该怎么做。

有人可以帮忙吗? 感谢

1 个答案:

答案 0 :(得分:0)

首先,一些可重复的数据:

mat <-
  data.frame(
    malA = sample(0:1, 100, TRUE, c(0.2,0.8))
    , malB = sample(0:1, 100, TRUE, c(0.3,0.7))
    , malC = sample(0:1, 100, TRUE, c(0.4,0.6))
    , malD = sample(0:1, 100, TRUE, c(0.5,0.5))
  )

out <- crossprod(as.matrix(mat))   
diag(out) <- 0

以下是使用dplyr限制您感兴趣的一半的示例:

toPlotHalf <-
  melt(out) %>%
  mutate_each(funs(factor(.))
              , starts_with("Var")) %>%
  filter(as.numeric(Var1) < as.numeric(Var2))

ggplot(toPlotHalf
       , aes(Var1, Var2)) +
  geom_point(aes(size = value), colour = "black") +
  theme_bw() + xlab("") + ylab("") +
  scale_size_continuous(range=c(2,10))

enter image description here

然而,请注意,通过这种方式,你的情节将由非常常见的特定疾病所主导。或者,您可以显示患有其他疾病的每个疾病患者的百分比(请注意,现在互惠点不是(必然)相同的大小:

toPlot <-
  prop.table(out, 1) %>%
  melt() %>%
  filter(value > 0)



ggplot(toPlot
       , aes(Var1, Var2)) +
  geom_point(aes(size = value), colour = "black") +
  theme_bw() + xlab("") + ylab("") +
  scale_size_continuous(range=c(2,10))

enter image description here