r - 如何改进 coord.polar() 图以可视化不同模式的交集?
问题描述
我想可视化占用时间和设备模式。例如,我想知道人们在家、与伴侣在一起以及他们使用电子设备的时间。因此,这些行为的同步时间。
我为不同的人创建了上面的情节。每个单独的行为模式都在一天中表示。
即使当所有三种模式都出现时,情节突出显示不同的模式也不清楚。有没有办法突出同步的时间?欢迎任何帮助。谢谢
我分享data.frame:
dput(tail(df5))
structure(list(id = c(99L, 99L, 99L, 99L, 99L, 99L), variable = structure(115:120, .Label = c("04:00",
"04:10", "04:20", "04:30", "04:40", "04:50", "05:00", "05:10",
"05:20", "05:30", "05:40", "05:50", "06:00", "06:10", "06:20",
"06:30", "06:40", "06:50", "07:00", "07:10", "07:20", "07:30",
"07:40", "07:50", "08:00", "08:10", "08:20", "08:30", "08:40",
"08:50", "09:00", "09:10", "09:20", "09:30", "09:40", "09:50",
"10:00", "10:10", "10:20", "10:30", "10:40", "10:50", "11:00",
"11:10", "11:20", "11:30", "11:40", "11:50", "12:00", "12:10",
"12:20", "12:30", "12:40", "12:50", "13:00", "13:10", "13:20",
"13:30", "13:40", "13:50", "14:00", "14:10", "14:20", "14:30",
"14:40", "14:50", "15:00", "15:10", "15:20", "15:30", "15:40",
"15:50", "16:00", "16:10", "16:20", "16:30", "16:40", "16:50",
"17:00", "17:10", "17:20", "17:30", "17:40", "17:50", "18:00",
"18:10", "18:20", "18:30", "18:40", "18:50", "19:00", "19:10",
"19:20", "19:30", "19:40", "19:50", "20:00", "20:10", "20:20",
"20:30", "20:40", "20:50", "21:00", "21:10", "21:20", "21:30",
"21:40", "21:50", "22:00", "22:10", "22:20", "22:30", "22:40",
"22:50", "23:00", "23:10", "23:20", "23:30", "23:40", "23:50",
"00:00", "00:10", "00:20", "00:30", "00:40", "00:50", "01:00",
"01:10", "01:20", "01:30", "01:40", "01:50", "02:00", "02:10",
"02:20", "02:30", "02:40", "02:50", "03:00", "03:10", "03:20",
"03:30", "03:40", "03:50"), class = "factor"), athome = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("Not at home", "At home"), class = "factor"),
usedev = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Not using device",
"Using device"), class = "factor"), withspouseorpartner = structure(c(2L,
2L, 2L, 2L, 2L, 2L), .Label = c("Not reported", "Reported"
), class = "factor")), row.names = 21595:21600, class = "data.frame")
我用来创建情节的代码:
df5$athome <- factor(df5$athome)
levels(df5$athome) <- c("Not at home", "At home")
df5$usedev <- factor(df5$usedev)
levels(df5$usedev) <- c("Not using device", "Using device")
df5$withspouseorpartner <- factor(df5$withspouseorpartner)
levels(df5$withspouseorpartner) <- c("Not reported", "Reported")
plot<-ggplot(df5, aes(variable, id)) +
geom_tile(aes(fill = athome, alpha = 0.5)) +
geom_tile(aes(fill = usedev, alpha = 0.5)) +
geom_tile(aes(fill = withspouseorpartner, alpha = 0.5)) +
scale_fill_manual(values = c("At home" = "red",
"Not at home" = "white",
"Not using device" = "transparent",
"Not reported"="transparent",
"Reported"="yellow",
"Using device" = "#0000FF88"))+ labs(x="Time (hours)", y="Individuals identification number", title=" Occupancy and device use", fill="Behaviour")+theme_bw()
plot + coord_polar()+ theme(axis.text.x = element_text(angle = ))+ scale_x_discrete(breaks = c( "04:00","05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00","13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", "23:00", "00:00", "01:00", "02:00", "03:00"), expand = c(0,0)) +scale_y_continuous(expand=c(0,0))
数据集的尾部:
tail(df5, 100)
id variable athome usedev withspouseorpartner
21501 99 07:20 Not at home Using device Not reported
21502 99 07:30 Not at home Using device Not reported
21503 99 07:40 At home Using device Not reported
21504 99 07:50 Not at home Using device Not reported
21505 99 08:00 Not at home Using device Not reported
21506 99 08:10 Not at home Using device Not reported
21507 99 08:20 Not at home Using device Not reported
21508 99 08:30 Not at home Using device Not reported
21509 99 08:40 Not at home Using device Not reported
21510 99 08:50 Not at home Using device Not reported
21511 99 09:00 Not at home Using device Not reported
21512 99 09:10 Not at home Using device Not reported
21513 99 09:20 Not at home Using device Not reported
21514 99 09:30 Not at home Using device Not reported
21515 99 09:40 Not at home Using device Not reported
21516 99 09:50 Not at home Using device Not reported
21517 99 10:00 Not at home Using device Not reported
21518 99 10:10 Not at home Using device Not reported
21519 99 10:20 Not at home Using device Not reported
21520 99 10:30 Not at home Using device Not reported
21521 99 10:40 Not at home Using device Not reported
21522 99 10:50 Not at home Using device Not reported
21523 99 11:00 At home Using device Not reported
21524 99 11:10 At home Using device Not reported
21525 99 11:20 Not at home Using device Not reported
21526 99 11:30 Not at home Using device Not reported
21527 99 11:40 Not at home Using device Not reported
21528 99 11:50 Not at home Using device Not reported
21529 99 12:00 Not at home Using device Not reported
21530 99 12:10 At home Using device Not reported
21531 99 12:20 At home Using device Not reported
21532 99 12:30 Not at home Using device Not reported
21533 99 12:40 Not at home Using device Not reported
21534 99 12:50 Not at home Using device Not reported
21535 99 13:00 Not at home Using device Not reported
21536 99 13:10 Not at home Using device Not reported
21537 99 13:20 Not at home Using device Not reported
21538 99 13:30 Not at home Using device Not reported
21539 99 13:40 Not at home Using device Not reported
21540 99 13:50 Not at home Using device Not reported
21541 99 14:00 Not at home Using device Not reported
21542 99 14:10 Not at home Using device Not reported
21543 99 14:20 Not at home Using device Not reported
21544 99 14:30 Not at home Using device Not reported
21545 99 14:40 Not at home Using device Not reported
21546 99 14:50 Not at home Using device Not reported
21547 99 15:00 Not at home Using device Not reported
21548 99 15:10 At home Using device Not reported
21549 99 15:20 Not at home Using device Not reported
21550 99 15:30 Not at home Using device Not reported
21551 99 15:40 Not at home Using device Not reported
21552 99 15:50 Not at home Using device Not reported
21553 99 16:00 Not at home Using device Not reported
21554 99 16:10 Not at home Using device Not reported
21555 99 16:20 Not at home Using device Not reported
21556 99 16:30 Not at home Using device Not reported
21557 99 16:40 Not at home Using device Not reported
21558 99 16:50 At home Using device Not reported
21559 99 17:00 Not at home Using device Not reported
21560 99 17:10 At home Using device Not reported
21561 99 17:20 Not at home Using device Not reported
21562 99 17:30 Not at home Using device Not reported
21563 99 17:40 Not at home Using device Reported
21564 99 17:50 Not at home Using device Reported
21565 99 18:00 Not at home Not using device Reported
21566 99 18:10 Not at home Not using device Reported
21567 99 18:20 Not at home Not using device Reported
21568 99 18:30 Not at home Not using device Reported
21569 99 18:40 Not at home Not using device Reported
21570 99 18:50 Not at home Not using device Reported
21571 99 19:00 Not at home Not using device Reported
21572 99 19:10 Not at home Not using device Reported
21573 99 19:20 Not at home Not using device Reported
21574 99 19:30 Not at home Not using device Reported
21575 99 19:40 Not at home Not using device Reported
21576 99 19:50 Not at home Not using device Reported
21577 99 20:00 Not at home Not using device Reported
21578 99 20:10 Not at home Not using device Reported
21579 99 20:20 Not at home Not using device Reported
21580 99 20:30 Not at home Not using device Reported
21581 99 20:40 Not at home Not using device Reported
21582 99 20:50 Not at home Not using device Reported
21583 99 21:00 Not at home Not using device Reported
21584 99 21:10 Not at home Not using device Reported
21585 99 21:20 Not at home Not using device Reported
21586 99 21:30 At home Not using device Reported
21587 99 21:40 At home Not using device Reported
21588 99 21:50 At home Not using device Reported
21589 99 22:00 Not at home Not using device Reported
21590 99 22:10 Not at home Not using device Reported
21591 99 22:20 Not at home Not using device Reported
21592 99 22:30 Not at home Not using device Reported
21593 99 22:40 Not at home Not using device Reported
21594 99 22:50 Not at home Not using device Reported
21595 99 23:00 Not at home Not using device Reported
21596 99 23:10 Not at home Not using device Reported
21597 99 23:20 Not at home Not using device Reported
21598 99 23:30 Not at home Not using device Reported
21599 99 23:40 Not at home Not using device Reported
21600 99 23:50 Not at home Not using device Reported
解决方案
一种可能的方法是使用interaction
您的aes
,例如:
library(ggplot2)
ggplot(DF, aes(x = variable, y = id, fill = interaction(athome, usedev, withspouseorpartner)))+
geom_tile(alpha = 0.5)+
coord_polar()+
theme(axis.text.x = element_text(angle = ))+
scale_x_discrete(breaks = c( "04:00","05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00","13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", "23:00", "00:00", "01:00", "02:00", "03:00"), expand = c(0,0)) +scale_y_continuous(expand=c(0,0))
您可以看到,在您的示例中,与伴侣在家并使用他们的设备的人由“紫色”颜色表示。
如果要突出显示特定组合,也可以使用一些“ifelse”语句创建一个新的分类列,例如:
library(dplyr)
library(ggplot2)
DF %>% mutate(NewCol = ifelse(athome == "At home" & usedev == "Using device" & withspouseorpartner == "Reported",
"All three","Not all three")) %>%
ggplot(aes(x = variable, y = id, fill = NewCol))+
geom_tile(alpha = 0.5)+
coord_polar()+
theme(axis.text.x = element_text(angle = ))+
scale_x_discrete(breaks = c( "04:00","05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00","13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", "23:00", "00:00", "01:00", "02:00", "03:00"), expand = c(0,0)) +scale_y_continuous(expand=c(0,0))
它回答了你的问题吗?
可重现的例子
为了涵盖所有类型的可能组合,我使用随机抽样重新创建您的数据框:
DF <- data.frame(id = rep(1:2,each = 144),
variable = format(seq(as.POSIXct("2013-01-01 00:00:00", tz="GMT"), length.out=144*2, by='10 min'), '%H:%M'),
athome = sample(c("At home", "Not at home"), 144*2 , replace = TRUE),
usedev = sample(c("Not using device", "Using device"),144*2 , replace = TRUE),
withspouseorpartner = sample(c("Not reported", "Reported"),144*2 ,replace = TRUE))
推荐阅读
- postgresql - 插入或选择并返回密钥
- typescript - mat-tab-nav-bar 选项卡未显示
- java - MultiMap 与集合
- ios - 在 iOS 设备上测试时 Unity 游戏延迟
- c# - 在 ASP.NET 中执行多个 Informix SQL 查询
- c# - C# foreach 在列表中
- react-native - 如何自定义 app.json 以使用 Expo 构建白标应用
- selenium - 如何在appium中获取具有特定标签的ADB logcat?
- api - POSTMAN-NEWMAN:403 禁止错误消息
- oracle - ORA-00936: 表达式缺席 + ORA-02063: LIENBD_S1 Oracle 前行