我正在用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,但是由于我的日期值是字符,所以该方法不起作用。
也许我需要使用其他方式来汇总订单?让我知道您是否需要在我的问题中添加任何内容。希望对此有任何意见,并感谢您的帮助。已经看过类似的问题,但没有任何帮助。
答案 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
但是,我可能仍建议将日期保留为日期并以不同的方式进行汇总,因为这可能使您更灵活地处理其他问题
当然,您也应该可以使用这种方法按组过滤。