如何使用ggplot2为两列获取每个月的平均昼夜

Posted

技术标签:

【中文标题】如何使用ggplot2为两列获取每个月的平均昼夜【英文标题】:how to take averaged diurnal for each month for two columns with ggplot2 【发布时间】:2017-07-06 11:54:57 【问题描述】:

我有一个包含两列的时间序列数据,我想要一个包含每个月平均小时模式的图表,就像附加的图表一样,但有两个时间序列。

             timestamp ET_control ET_treatment    
1  2016-01-01 00:00:00         NA           NA  
2  2016-01-01 00:30:00         NA           NA  
3  2016-01-01 01:00:00         NA           NA  
4  2016-01-01 01:30:00         NA           NA  
5  2016-01-01 02:00:00         NA           NA  
6  2016-01-01 02:30:00         NA           NA  
7  2016-01-01 03:00:00         NA           NA  
8  2016-01-01 03:30:00         NA           NA  
9  2016-01-01 04:00:00         NA           NA  
10 2016-01-01 04:30:00         NA           NA  
11 2016-01-01 05:00:00         NA           NA  
12 2016-01-01 05:30:00         NA           NA  
13 2016-01-01 06:00:00         NA           NA  
14 2016-01-01 06:30:00         NA           NA  
15 2016-01-01 07:00:00         NA           NA  
16 2016-01-01 07:30:00         NA           NA  
17 2016-01-01 08:00:00         NA           NA  
18 2016-01-01 08:30:00         NA           NA  
19 2016-01-01 09:00:00         NA           NA  
20 2016-01-01 09:30:00         NA           NA  
21 2016-01-01 10:00:00         NA           NA  
22 2016-01-01 10:30:00         NA           NA  
23 2016-01-01 11:00:00         NA           NA  
24 2016-01-01 11:30:00 0.09863437           NA  
25 2016-01-01 12:00:00 0.11465258           NA  
26 2016-01-01 12:30:00 0.12356855           NA  
27 2016-01-01 13:00:00 0.09246215  0.085398782  
28 2016-01-01 13:30:00 0.08843156  0.072877001  
29 2016-01-01 14:00:00 0.08536019  0.081885947  
30 2016-01-01 14:30:00 0.08558541           NA  
31 2016-01-01 15:00:00 0.05571436           NA  
32 2016-01-01 15:30:00 0.04087248  0.038582547  
33 2016-01-01 16:00:00 0.04233724           NA  
34 2016-01-01 16:30:00 0.02150660  0.019560578  
35 2016-01-01 17:00:00 0.01803765  0.019691155  
36 2016-01-01 17:30:00         NA  0.005190489  
37 2016-01-01 18:00:00         NA           NA  
38 2016-01-01 18:30:00         NA           NA  
39 2016-01-01 19:00:00         NA           NA  
40 2016-01-01 19:30:00         NA           NA  
41 2016-01-01 20:00:00         NA           NA  
42 2016-01-01 20:30:00         NA           NA  
43 2016-01-01 21:00:00         NA           NA  
44 2016-01-01 21:30:00         NA           NA  
45 2016-01-01 22:00:00         NA           NA  
46 2016-01-01 22:30:00         NA           NA  
47 2016-01-01 23:00:00         NA           NA  
48 2016-01-01 23:30:00         NA           NA  
49 2016-01-02 00:00:00         NA           NA  
50 2016-01-02 00:30:00         NA           NA  

【问题讨论】:

【参考方案1】:

假设 t 是你的 data.frame,包含 dplyr 和 ggplot2 包:

t <- t %>% mutate(
       month = format(strptime(timestamp, "%Y-%m-%d %H:%M:%S"), "%b"),
       hour=format(strptime(timestamp, "%Y-%m-%d %H:%M:%S"), "%H"))

tm <- t %>% group_by(month, hour) %>% 
       summarize(ET_control_mean=mean(ET_control, na.rm=T))

ggplot(tm, aes(x=hour, y=ET_control_mean)) + geom_point() + facet_wrap(~ month)

如果您想在图表中同时包含两列,则应将数据转换为“长”格式。

【讨论】:

非常感谢,这段代码真的救了我。 (一个小错字在第二行的末尾 rm.na 应该是 na.rm)

以上是关于如何使用ggplot2为两列获取每个月的平均昼夜的主要内容,如果未能解决你的问题,请参考以下文章

如何将单个表格行转换为两列?

使用sas proc转置将行拆分为两列

如何在熊猫中将一列拆分为两列

如何从字符串中提取文本并将其保存为两列并在第三列的末尾添加字符

如何找到滚动的 3 个月方差?

分列:将excel单元格的内容拆分为两列