【问题标题】:R Time series line chartR时间序列折线图
【发布时间】:2020-04-03 13:10:00
【问题描述】:

我想要从记录开始到结束的咖啡分配折线图。我想确定每天购买的饮料。每天的相应数量应在整个时间范围内显示。 在我读入数据集后,我遇到了日期/时间格式的第一个问题。 我怀疑我没有将它们转换成正确的格式。

然后我尝试计算每天的咖啡消耗量。然后我发现我的公式总是使用 2020 年,尽管它可以追溯到 2019 年。

所以我的情节看起来很有趣,而且没有找到年份。

有人可以帮帮我吗?

非常感谢!

数据集链接:https://github.com/Skruff80/Getting-started/blob/master/ProductList.csv


coffeedata <- fread("C:/temp/ProductList.csv")

str(coffeedata)
head(coffeedata)
coffeedata$Date = as.Date(coffeedata$Date, "%d.%m.%y")
head(coffeedata)

countcoffee <- function(timeStamps) {
  Dates <- as.Date(strftime(coffeedata$Date, "%Y-%m-%d"))
  allDates <- seq(from = min(Dates), to = max(Dates), by = "day")
  coffee.count <- sapply(allDates, FUN = function(X) sum(Dates == X))
  data.frame(day = allDates, coffee.count = coffee.count)}

daylicounter = countcoffee(df$message.date)

lines(daylicounter)

情节应该类似于链接中的图片。 https://github.com/Skruff80/Getting-started/blob/master/example.png

感谢您的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    使用 ggplot2

    您可以通过使用ggplot2 库来做到这一点,就像在这段代码中一样:

    library(ggplot2)
    ggplot(daylicounter, aes(day, coffee.count)) +
      geom_line(color = "orange", size = 1) + 
      scale_x_date(breaks = "1 month", date_labels = "%Y-%m-%d")
    

    这是输出图:

    编辑

    如果需要自定义中断向量,可以使用如下代码:

    library(ggplot2)
    break.vec <- seq(from = min(daylicounter$day), to = max(daylicounter$day),
                       by = "month")
    
    ggplot(daylicounter, aes(day, coffee.count)) +
       geom_line(color = "orange", size = 1) + 
       scale_x_date(breaks = break.vec, date_labels = "%d-%m-%Y")
    

    希望对您有所帮助。

    【讨论】:

    • 嗨@Louis 感谢您的回复!该图看起来不错,但 X 轴上的日期格式不正确。我想我在格式化时间格式时做错了。时间格式应为 06/01/2019 - 04/04/2010。
    • 不客气@Skruff!如果您想要自定义中断,请使用编辑部分中的代码:)
    • 感谢@Louis,我已经使用了您编辑的版本,但 x 轴的问题仍然存在。如果您查看 x 轴上的绘图,您会看到开始是 2020-04-01,结束是 2020-10-01。所以这意味着 2020 年 10 月,但这不是预测 :-) 我仍然怀疑我在格式化日期时犯了一个错误。 coffeedata$Date = as.Date(coffeedata$Date, "%d.%m.%y")
    【解决方案2】:

    可以修复 X ​​轴的错误。正如我已经怀疑的那样,重新格式化日期是错误的。 我用过

    %y
    

    而不是

    %Y
    
    coffeedata$Date = as.Date(coffeedata$Date, "%d.%m.%Y")
    

    【讨论】: