gpt4 book ai didi

r - 在 R 中绘制每小时曲线

转载 作者:行者123 更新时间:2023-12-04 09:45:46 25 4
gpt4 key购买 nike

我是 R 的初学者,我想向您寻求帮助。

任务:
我想制作一个图表,代表白天每小时的用水量。该图由多条不同日期的曲线组成(例如,请参阅链接 here)。

我将每天的数据分成子列表:

    > head(aaa)
[[1]]
by60min consumption
1 2018-07-01 00:05:00 0
2 2018-07-01 01:05:00 0
3 2018-07-01 02:05:00 0
4 2018-07-01 03:05:00 0
....
[[2]]
by60min consumption
25 2018-07-02 00:05:00 0
26 2018-07-02 01:05:00 0
27 2018-07-02 02:05:00 0
28 2018-07-02 03:05:00 0

有时,没有水消耗,我想避免将这些天绘制到图表中。而我一直被困在这里。我不知道怎么做。我的想法是删除消耗为零的所有天数,然后绘制非零天数,但我无法做到。有什么想法怎么做(绘制非零天数或/以及如何从列表中删除子列表)?

非常感谢您提前。

卢博什

添加:
# 1st step - tibble:
aaa <- as.tibble(aaa)
aaa
# A tibble: 1,487 x 2
by60min consumption
<fct> <dbl>
1 2018-07-01 00:05:00 0
2 2018-07-01 01:05:00 0
3 2018-07-01 02:05:00 0
4 2018-07-01 03:05:00 0
5 2018-07-01 04:05:00 0
6 2018-07-01 05:05:00 0
7 2018-07-01 06:05:00 0
8 2018-07-01 07:05:00 0.101
9 2018-07-01 08:05:00 0.167
10 2018-07-01 09:05:00 0.267
# ... with 1,477 more rows

# 2nd step - plot:
aaa %>%
mutate(day = factor(day(ymd_hms(by60min))),
hour = factor(hour(ymd_hms(by60min)))) %>%
group_by(day) %>%
filter(sum(consumption) > 0) %>%
ggplot(mapping = aes(x = hour, y = consumption,
col = day,
show.legend = FALSE)) +
geom_line(show.legend = FALSE)

# OUTPUT (the picture below) - bar graph instead of line chart - why?
# please NOTE that akt_spotreba == consumption

enter image description here
dput(aaa) # I inserted only first three rows
structure(list(by60min = structure(c(1L, 2L, 3L, 4L, 5L, 6L,
7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L,
20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L,

最佳答案

这是一个 tidyverse方法,使用一个简单的示例数据集,基于您提供的内容。

l1 = data.frame(by60min = c("2018-07-01 00:05:00","2018-07-01 01:05:00","2018-07-01 02:05:00"),
consumption = 0)

l2 = data.frame(by60min = c("2018-07-02 00:05:00","2018-07-02 01:05:00","2018-07-02 02:05:00"),
consumption = c(0,2,30))

l3 = data.frame(by60min = c("2018-07-03 00:05:00","2018-07-03 01:05:00","2018-07-03 02:05:00"),
consumption = c(10,8,2))

l = list(l1,l2,l3)

您的原始数据如下所示:

[[1]]
by60min consumption
1 2018-07-01 00:05:00 0
2 2018-07-01 01:05:00 0
3 2018-07-01 02:05:00 0

[[2]]
by60min consumption
1 2018-07-02 00:05:00 0
2 2018-07-02 01:05:00 2
3 2018-07-02 02:05:00 30

[[3]]
by60min consumption
1 2018-07-03 00:05:00 10
2 2018-07-03 01:05:00 8
3 2018-07-03 02:05:00 2

library(tidyverse)
library(lubridate)

map_df(l, data.frame) %>% # combine list element to one dataframe
mutate(day = factor(date(ymd_hms(by60min))), # get day from date
hr = hour(ymd_hms(by60min))) %>% # get hour from date
group_by(day) %>% # for each day
filter(sum(consumption) > 0) %>% # calculate sum of consumption and remove days where this is 0
ungroup() %>%
ggplot(aes(hr, consumption, col=day))+ # plot lines
geom_line()

输出图:

enter image description here

关于r - 在 R 中绘制每小时曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52468102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com