【问题标题】:Using character values as axis scale使用字符值作为轴刻度
【发布时间】:2018-12-11 21:46:06
【问题描述】:

我正在用 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,但这不起作用,因为我的日期值是字符。

也许我需要使用不同的方式来汇总订单?如果您需要我对我的问题添加任何内容,请告诉我。希望对此有任何意见,并且已经感谢您的帮助。已经看过类似的问题,但没有什么能真正帮助我解决这个问题。

【问题讨论】:

标签: r ggplot2 aggregate


【解决方案1】:

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

这是一个常见问题,看到一些问题得到了很多赞:

Select first and last row from grouped dataFilter the middle row of each group

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

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 ))

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

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

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2018-03-15
    • 2017-08-18
    • 2019-06-12
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多