【问题标题】:Circular time plots in R with stacked roseR中的圆形时间图,带有堆叠的玫瑰
【发布时间】:2013-09-09 23:36:34
【问题描述】:

我在 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

我想根据数据框创建一个带有堆叠玫瑰的循环时间,即每个堆叠玫瑰按列分组,大小由列时间定义。

小时列表示每朵玫瑰的x位置。

所以我用这种方式尝试了但结果与我想要的不匹配:

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

希望我的解释正确。谢谢!

【问题讨论】:

  • 仅供参考,您的matrix 不是矩阵——它是一个data.frame。矩阵必须是 R 中的所有一种数据类型(例如数字)。
  • 感谢您的信息!
  • 不客气,@Roben。如果它对你有帮助,我在这里对这类事情进行了细分:Learning R for someone used to MATLAB and confusion with R data types
  • 您是否尝试过以毫秒为单位计算您的时间并将其转换为数字,然后您可以用来计算每列的大小
  • @Asayat 我将时间转换为几个小时,但值似乎不匹配。另外还有一些玫瑰没有出现在两种颜色——叠玫瑰——中,只有一种。

标签: r ggplot2 rose-diagram


【解决方案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 小时,而其他情况下只有几秒钟。 您可以使用 facet 尝试单独的图表(之后最好使用颜色:))

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

如果您按小时比较数据,圆形图很好,但如果您还想比较发生变量的差异,认为最好用老式条形图显示。

【讨论】:

  • 谢谢,就是这样!但是玫瑰是相互重叠的,在图中不能避免重叠吗?
  • 我的错,将 geom_bar 中的宽度更改为较小的值,应该可以工作
  • 我会接受答案谢谢!然而最后一朵玫瑰(0/24)从未出现,知道会是什么吗?
  • 添加 +geom_text(aes(label=hour)) 以查看 x 轴的标签,24 在那里。同样,它可能是缩放问题,检查两个发生值所花费的总秒数之和,第 24 小时的时间是 22835,而最大值是 134222。所以玫瑰(0/24)没有出现,原因与 4 相同, 5,而 16 没有。
猜你喜欢
  • 2014-03-07
  • 1970-01-01
  • 2014-05-03
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多