首页 > 解决方案 > 如何改进 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

标签: rdataframeggplot2

解决方案


一种可能的方法是使用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))


推荐阅读