使用字符值作为轴刻度

时间:2018-07-03 14:19:12

标签: r ggplot2 aggregate

我正在用ggplot绘制每周订单量的图表。我只获取每日数据并像这样汇总:

subRC$week <- ISOweek(ymd(subRC$L01.Order.Date))
aggRC <- aggregate(subRC$Cases.Sold, by= list(subRC$week), sum)

L01.Order.Date为MM-DD-YYYY格式。 这对我来说非常有效,我的数据看起来像这样(此处生成了随机值,但没有任何改变):

Group.1     x
2016-W01    15444
2016-W02    134900
2016-W03    2639
2016-W04    13055
2016-W05    18012
2016-W06    138764
2016-W07    73204
2016-W08    111646
2016-W09    33872
2016-W10    35456
2016-W11    106070
2016-W12    37843
2016-W13    66861
2016-W14    46273
2016-W15    19049
2016-W16    62065
2016-W17    52882
2016-W18    67134
2016-W19    60766
2016-W20    89763
2016-W21    80680
2016-W22    101619
2016-W23    120757
2016-W24    91560
2016-W25    123721
2016-W26    23647
2016-W27    67131
2016-W28    44775
2016-W29    123575
2016-W30    130845
2016-W31    114168
2016-W32    84923
2016-W33    123661
2016-W34    66065
2016-W35    80636
2016-W36    146880
2016-W37    50515
2016-W38    75468
2016-W39    145391
2016-W40    5586
2016-W41    16922
2016-W42    67943
2016-W43    140725
2016-W44    96454
2016-W45    47013
2016-W46    47276
2016-W47    54241
2016-W48    46889
2016-W49    116884
2016-W50    70194
2016-W51    141270
2016-W52    60754
2017-W01    5214
2017-W02    65803
2017-W03    48864
2017-W04    41300
2017-W05    65923
2017-W06    67856
2017-W07    104272
2017-W08    138575
2017-W09    97664
2017-W10    62303
2017-W11    78402
2017-W12    78170
2017-W13    27001
2017-W14    38086
2017-W15    87113

现在,我想生成一个图,在该图中我希望轴刻度显示第一个,中间和结束日期。对于此处的示例为:2016-W01、2016-W34和2017-W15。日期在我的分析过程中会发生变化,因此我希望它可以调整为我正在使用的数据集。到目前为止,这是我尝试过的:

ggplot() +
   geom_line(data = aggRC, aes(Group.1, x, group=1, color = "Retail Chubs"))+
   scale_x_discrete(labels = c(min(aggRC$Group.1), median(aggRC$Group.1), 
   max(aggRC$Group.1)))

但是我什至没有做任何事情,因为Group.1是字符而不是数字。 我也尝试过使用scale_x_date,但是由于我的日期值是字符,所以该方法不起作用。

也许我需要使用其他方式来汇总订单?让我知道您是否需要在我的问题中添加任何内容。希望对此有任何意见,并感谢您的帮助。已经看过类似的问题,但没有任何帮助。

1 个答案:

答案 0 :(得分:1)

即使有字符,也可以按位置选择

这是一个常见的问题,并且看到了一些带有很多投票的问题:

https://cello.readthedocs.io/en/latest/setup_master/Select first and last row from grouped data

现在将两者合并为一个选择:

require(ggplot2)
require(dplyr)

p_dat <- example_df %>%  #have renamed your dataframe and pre-filtered
                  arrange(Group.1) %>% 
                  filter(row_number() %in% c(1, ceiling(n()/2), n()))                                  
p_dat
  Group.1     x
1 2016-W01 15444
2 2016-W34 66065
3 2017-W15 87113

ggplot() +
    geom_point(data = p_dat, aes(x = Group.1, y = x ))

Filter the middle row of each group

但是,我可能仍建议将日期保留为日期并以不同的方式进行汇总,因为这可能使您更灵活地处理其他问题

当然,您也应该可以使用这种方法按组过滤。