绘制二进制矩阵-R

时间:2020-07-02 11:07:36

标签: r matrix plot binary

我有一个二进制矩阵,其中行名是用户名,列名是日期。如示例中所述,如何绘制数据。

示例:

  2011-1-6  2011-1-9  2011-1-15  2011-2-19  Labels
A    1         0         0          1         1
B    0         1         1          1         2
C    1         1         0          0         3

在这种情况下,所需的图形将如下所示:

enter image description here

1 个答案:

答案 0 :(得分:2)

有几种方法,但我想鼓励使用整洁的数据和ggplot2。因此,假设您的矩阵命名为mat

library(tidyr)
library(dplyr)
library(ggplot2)
# or simply just use: library(tidyverse)

mat %>% 
  as.data.frame() %>%
  mutate(id=rownames(.),
         Labels = as.factor(Labels)) %>%
  pivot_longer(cols=starts_with("2011")) %>%
  filter(value==1) %>%
  ggplot(aes(x=name, y=id, color=Labels)) + 
    geom_point() + 
    theme(axis.text.x = element_text(angle = 90))

返回与所需输出相似的图。

那我们做了什么?

  1. 将矩阵转换为data.frame。
  2. 将行名添加到新列。
  3. 将数据重塑为“长”格式。这是ggplot处理数据所必需的。
  4. 删除(filter行中的所有value == 0行,因为只有value == 1行应为绘图笔。
  5. 最后使用ggplot将数据绘制为散点图(geom_points),其颜色分别为Labels和x轴的旋转标签。

数据

structure(c(1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 2, 3), 
          .Dim = c(3L, 5L), 
          .Dimnames = list(c("A", "B", "C"), 
                           c("2011-1-6", "2011-1-9", "2011-1-15", "2011-2-19", "Labels")))