我有一个二进制矩阵,其中行名是用户名,列名是日期。如示例中所述,如何绘制数据。
示例:
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
在这种情况下,所需的图形将如下所示:
答案 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))
返回与所需输出相似的图。
那我们做了什么?
ggplot
处理数据所必需的。filter
行中的所有value == 0
行,因为只有value == 1
行应为绘图笔。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")))