r - 将逻辑数据绘制为 R 中的填充和空方块行
问题描述
我正在跟踪我想在文本文件/电子表格/任何东西中建立的习惯。它看起来像这样:
habits <- read.table(textConnection("
date study exercise clean
2019-01-08 TRUE TRUE TRUE
2019-01-09 FALSE FALSE TRUE
2019-01-10 TRUE TRUE TRUE
2019-01-11 FALSE TRUE TRUE
2019-01-12 TRUE FALSE TRUE
2019-01-13 FALSE TRUE TRUE
2019-01-14 TRUE TRUE TRUE
2019-01-15 FALSE FALSE TRUE
2019-01-16 FALSE FALSE TRUE
2019-01-17 FALSE FALSE TRUE
2019-01-18 FALSE FALSE TRUE
2019-01-19 FALSE FALSE TRUE
2019-01-20 FALSE TRUE TRUE
2019-01-21 FALSE FALSE TRUE
2019-01-22 TRUE FALSE TRUE
2019-01-23 FALSE TRUE TRUE
2019-01-24 TRUE FALSE TRUE
2019-01-25 FALSE FALSE TRUE
2019-01-26 TRUE FALSE TRUE
2019-01-27 FALSE FALSE TRUE
2019-01-28 TRUE TRUE FALSE
2019-01-29 FALSE TRUE TRUE
2019-01-30 TRUE TRUE TRUE
2019-01-31 FALSE TRUE TRUE
2019-02-01 TRUE FALSE TRUE
2019-02-02 FALSE TRUE TRUE
2019-02-03 TRUE TRUE TRUE
2019-02-04 FALSE FALSE TRUE
2019-02-05 FALSE FALSE TRUE
2019-02-06 FALSE TRUE TRUE
2019-02-07 TRUE FALSE TRUE
2019-02-08 FALSE FALSE TRUE
2019-02-09 FALSE FALSE TRUE
2019-02-10 TRUE TRUE TRUE
2019-02-11 FALSE FALSE TRUE
2019-02-12 FALSE TRUE TRUE
2019-02-13 FALSE FALSE TRUE
2019-02-14 FALSE FALSE FALSE
2019-02-15 FALSE FALSE FALSE
2019-02-16 FALSE FALSE FALSE
2019-02-17 TRUE FALSE TRUE
2019-02-18 FALSE FALSE TRUE
2019-02-19 FALSE FALSE TRUE
2019-02-20 FALSE FALSE TRUE
2019-02-21 FALSE FALSE TRUE
2019-02-22 TRUE FALSE TRUE
2019-02-23 FALSE FALSE FALSE
2019-02-24 FALSE FALSE FALSE
2019-02-25 FALSE FALSE FALSE
2019-02-26 FALSE FALSE FALSE
2019-02-27 FALSE FALSE FALSE
2019-02-28 FALSE FALSE FALSE
"), header = TRUE, colClasses=c("Date", "logical", "logical", "logical"))
我想把我的坚持想象成一个“习惯追踪者”:
如何将逻辑数据绘制为填充和空方块的行?
我更喜欢使用 base R 的解决方案,但这不是必须的。
解决方案
这是一个基本的 R 解决方案。它只是绘制了一堆矩形。
BW = c("#555555", "#EEEEEE")
StartX = as.numeric(habits$date)[1]
dev.new(width=22,height=4)
plot(rep(2:5, length.out=nrow(habits)) ~ habits$date, type="n",
xlab="", ylab="", yaxt="n", xaxt="n", bty="n" )
for(j in 2:4) {
for(i in 1:nrow(habits)) {
polygon(c(StartX+i-1, StartX+i-1, StartX+i, StartX+i),
c(j,j+1,j+1,j), col=BW[habits[i,j]+1])
}
}
axis(2, at=c(2.6, 3.6, 4.6), labels=names(habits[,2:4]),
lty=0, las=1, line=-2)
axis(1, at=habits$date+0.5, labels=as.character(habits$date),
lty=0, las=2, line=-0.8)
推荐阅读
- php - 如果条件为真,则显示 div
- kotlin - 结果一直说:“类型不匹配:推断类型是单位,但预期是字符串”
- javascript - 赛普拉斯“get”是否按照元素出现在 HTML 文档中的顺序返回元素?
- node.js - 节点/快递错误,RangeError [ERR_HTTP_INVALID_STATUS_CODE]:无效状态代码:ENOENT
- android - 由于 Activity 意图,Android 通知点击导致应用程序崩溃
- delphi - 在 Delphi Rio (10.3.3) 中,当宏为 NULL 时,fdQuery 无法正确转换条件函数 'iif'
- python - 根据第三列中的条件合并两个数据框
- powershell - 将列表传递给函数
- mysql - 使用时区进行查询的最佳方法
- reactjs - 使用没有离子的电容器社区/admob