在绘制数据子组的方式时遇到麻烦

时间:2019-06-09 01:46:06

标签: r ggplot2 dplyr

我有描述按日期和小时分组的一系列观察(声音水平)的数据。我想绘制每天每小时的平均声音水平,Y轴上的声音水平和X轴上的小时,以及每天的折线图。示例数据:

Hour Date SPL

1 18-May 107.9868

2 18-May 106.5656

1 19-May 107.4321

2 19-May 107.8993

我已经使用了group_by函数,但是我不确定是否可以做得更好:

spl_mean <- group_by(sound, Hour) %>%
    summarize(count = n(), Mean = mean(SPL, na.rm = T))

ggplot(data=spl_mean) + geom_line(aes(x = Hour, y = Mean, group = 1), size = 2)

显然,这只是按小时给出了SPL的平均值,却没有保留“天”子组。

2 个答案:

答案 0 :(得分:1)

使用库 dplyr 计算每小时和每天的平均值,然后使用库 ggplot2 绘制结果。

df %>%
   group_by(Date, Hour) %>%
   summarise(SPL_mean = mean(SPL, na.rm = T) %>%
   arrange(Date, Hour) %>%
   ggplot(aes(x = Hour, y = SPL_mean, color = Date) + geom_line()

答案 1 :(得分:0)

使用ggplot,其中D为日,H为小时,V为音量。

# setup for demo
library('tidyverse')
df <- tibble(
  'D' = c(1:5,1:5),
  'H' = rep(c(1,2), each = 5),
  'V' = rnorm(10, 100, 5))

# Figure
ggplot(data = df) +
  geom_line(mapping = aes(x = H, y = V, group = D, color = D))

这是告诉它在x上执行小时,在y上执行体积,并分别绘制不同的日期。

如果您需要先获取每天和每小时的平均值,则需要按天和小时获取group_by,然后进行总结:

df %>% 
  group_by(D, H) %>%
  summarize(MV = mean(V)) %>%
  ggplot() +
    geom_line(mapping = aes(x = H, y = MV, group = D, color = D))

然后通过实验室,主题,音阶等使它变得漂亮