Круговые графики времени в R с уложенной розой

У меня есть фрейм данных, импортированных в Excel со следующими значениями:

> dt <- read.csv(file="teste1.csv",head=TRUE,sep=";")
> dt
   hour occur     time    tt
1     1   one 00:00:59    59
2     2   one 08:40:02 31202
3     3   one 07:09:59 25799
4     4   one 01:22:16  4936
5     5   one 01:30:28  5428
6     6   one 01:28:57  5337
7     7   one 19:05:34 68734
8     8   one 01:57:47  7067
9     9   one 00:13:17   797
10   10   one 12:14:48 44088
11   11   one 23:24:43 84283
12   12   one 13:23:14 48194
13   13   one 02:28:51  8931
14   14   one 14:21:24 51684
15   15   one 13:26:14 48374
16   16   one 00:27:24  1644
17   17   one 15:56:51 57411
18   18   one 11:07:50 40070
19   19   one 07:18:18 26298
20   20   one 07:33:13 27193
21   21   one 10:02:03 36123
22   22   one 11:30:32 41432
23   23   one 21:21:27 76887
24   24   one 00:49:18  2958
25    1   two 21:01:11 75671
26    2   two 11:00:40 39640
27    3   two 21:40:09 78009
28    4   two 01:05:37  3937
29    5   two 00:44:17  2657
30    6   two 12:43:21 45801
31    7   two 10:53:49 39229
32    8   two 08:29:09 30549
33    9   two 05:07:46 18466
34   10   two 17:32:37 63157
35   11   two 09:35:16 34516
36   12   two 03:04:19 11059
37   13   two 23:09:13 83353
38   14   two 01:15:49  4549
39   15   two 14:24:33 51873
40   16   two 01:12:53  4373
41   17   two 21:20:11 76811
42   18   two 02:25:21  8721
43   19   two 01:17:37  4657
44   20   two 15:07:50 54470
45   21   two 22:27:32 80852
46   22   two 01:41:07  6067
47   23   two 09:40:23 34823
48   24   two 05:31:17 19877

Я хочу создать круговое время со сложенной розой на основе фрейма данных, т. Е. Каждая сложенная роза группируется по столбцу, а размер определяется по времени столбца.

Столбец часа указывает положение х каждой розы.

Я попытался таким образом, но результат не соответствует тому, что я хочу:

ggplot(dt, aes(x = hour, fill = occur)) + geom_histogram(breaks = seq(0, 
    24), width = 2, colour = "grey") + coord_polar(start = 0) + theme_minimal() + 
    scale_fill_brewer() + scale_x_continuous("", limits = c(0, 24), breaks = seq(0, 24), labels = seq(0, 
        24))

Что я делаю не так? Я хочу что-то вроде этого http://blog.odotech.com/Portals/57087/images/French%20landfill%20wind%20rose.png

Надеюсь, я правильно объяснил. Спасибо!

1 ответ

Решение

Не уверен, но надеюсь, что это поможет:

Преобразуйте значение времени в числовое (я использовал пакет chron, но существует множество других способов, поэтому вам не нужно вызывать эту библиотеку, а просто сделать ее более простой):

library(chron)
x$tt<-hours(times(x$time))*3600+minutes(times(x$time))*60+seconds(times(x$time))

И сделать график:

p<-ggplot(x, aes(x = hour, y=tt,fill = occur)) + 
geom_bar(breaks = seq(0,24), width = 2, colour="grey",stat = "identity") +
theme_minimal() + 
scale_fill_brewer()+coord_polar(start=0)+
scale_x_continuous("", limits = c(0, 24), breaks = seq(0, 24), labels = seq(0,24))

Это нормально?введите описание изображения здесь

Здесь в некоторых случаях используется только 1 цвет, но это связано с проблемами масштабирования, так как в некоторых случаях время составляет около 24 часов, а в других - только в секундах. Вы можете попробовать отдельные графики, используя фасет (потом лучше поиграть с цветами:))

p+facet_grid(~occur)+ theme(axis.title.y = theme_blank(),
                       axis.text.y =  theme_blank()) 

введите описание изображения здесь

Круговой график хорош, если вы сравниваете данные по часам, но если вы также хотите сравнить различия в встречающейся переменной, подумайте, что лучше показывать на старых гистограммах.

Другие вопросы по тегам