了解R中的时间序列图和ggplot2

时间:2019-07-05 19:58:08

标签: r ggplot2

我正在尝试在R中创建一个简单的条形图,该条形图将日期和金额按月份分组。

尽管我对R有基本的了解,但我仍在努力理解为什么它的行为方式如此。

到目前为止,这是我的进步:

Basic R plot

如您所见,我正在使用两个简单变量:amount_net表示金额,month_year_begindate表示时间序列。这是我的数据示例:

> head(df)
  amount_net month_year_begindate
1    3306.11           2017-10-01
2    5471.28           2018-07-01
3    4584.86           2018-07-01
4    5923.76           2018-07-01
5    3830.59           2018-07-01
6    4035.04           2018-07-01

这是我用来创建图形的代码:

require(ggplot2)
require(scales)

g <- ggplot(data = df)

g + geom_bar(aes(x = month_year_begindate , y = amount_net), stat="identity",
             colour = "dodgerblue3") +
  scale_x_date(date_breaks = "1 month", labels = date_format("%B de %Y"))  +
  theme(axis.text.x = element_text(angle = 90, vjust = 0, hjust = 1))

但是,我无法理解两个基本知识:

  1. 为什么R不能按要求将所有数据着色为蓝色?数据中没有缺失或NA值。
  2. 为什么R包含两个没有数据的月份(“ julio de 2017”和“ septiembre de 2019”)?另外,如果我使用limits = as.Date(c('2019-01-01', '2019-05-01')),则会看到相同的行为(开头和结尾的值显示为空)。

能帮助我理解和解决这个问题的人吗?

1 个答案:

答案 0 :(得分:1)

在我看来,问题可能是由于过多的width条引起的。请参见此示例以及您的玩具数据(注意,我已按日期对其进行了汇总):

library(data.table)

dt[, month_year_begindate := lubridate::ymd(month_year_begindate)]

ggplot(dt[, .(amount_net = sum(amount_net)), by = month_year_begindate]) + 
     geom_bar(aes(x = month_year_begindate , y = amount_net), 
              stat="identity",
              fill = "dodgerblue3", 
              width = 5) +
     scale_x_date(date_breaks = "1 month", labels = date_format("%B de %Y"))  +
     theme(axis.text.x = element_text(angle = 90, vjust = 0, hjust = 1))

enter image description here