Построить логические данные в виде строк заполненных и пустых квадратов в R - PullRequest
0 голосов
/ 01 марта 2019

Я отслеживаю привычки, которые хочу встроить в текстовый файл / электронную таблицу / что угодно.Выглядит это так:

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"))

Я бы хотел визуализировать свою приверженность как «средство отслеживания привычек»:

image of a hand-drawn habit tracker

Как отобразить логические данные в виде строк заполненных или пустых квадратов?

Я бы предпочел решение с использованием базы R, но это не обязательно.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вот базовое решение 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)

Schedule

0 голосов
/ 01 марта 2019

Вот начало взлома, чтобы сделать это.

library(tidyverse) # really need ggplot2, dplyr and tidyr

habits %>% 
gather(activity, achievement, -date) %>% 
filter(achievement == TRUE) %>% # Only show sucesses
ggplot(aes(date, achievement))+
geom_tile()+ # This gives you the tile structure
facet_wrap(~activity, ncol = 1) # Could change this

Это даст вам нечто, очень похожее на то, что вы хотите.Возможно, есть лучший способ получить плитки активности по оси Y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...