Использование значений символов в качестве масштаба оси - PullRequest
0 голосов
/ 03 июля 2018

Я работаю над графиком еженедельных объемов заказов в ggplot. Я получаю только ежедневные данные и собираю их так:

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

L01. Заказ.Дата в формате ММ-ДД-ГГГГ. Это прекрасно работает для меня, и мои данные выглядят так (здесь генерируются случайные значения, но это ничего не меняет):

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 голосов
/ 03 июля 2018

Даже с символами, вы можете выбрать по позиции

Это распространенная проблема, и вы видите некоторые вопросы со многими ответами:

Выберите первый и последний ряд из сгруппированных данных и Фильтруйте средний ряд каждой группы

Теперь объедините оба в один выбор:

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

enter image description here

Тем не менее, я бы, вероятно, все же посоветовал бы сохранять даты как даты и агрегировать их по-разному, поскольку это может сделать вас более гибким в отношении других вопросов

Конечно, вы также сможете фильтровать по группам при таком подходе.

...