Проще всего использовать StatsPlots.jl следующим образом:
using StatsPlots, Dates
d = Date.(first.(df2.time, 10))
df2.year = year.(d)
df2.day = @. dayofyear(d) + ((!isleapyear(d)) & (month(d) > 2))
@df df2 plot(:day, :closeAsk, group=:year)
Обратите внимание, что я создаю :day
таким образом, чтобы правильно выровнять комбинации месяца и дня по оси x (с учетом факта).что в разные годы у вас может быть разный набор торговых дней и внесение поправок в високосный год, где это необходимо).
РЕДАКТИРОВАТЬ
Объяснение @. dayofyear(d) + ((!isleapyear(d)) & (month(d) > 2))
:
@.
передает все функции, следующие за этим знаком dayofyear(d)
: возвращает номер дня в данном году;обратите внимание, что високосные годы имеют 366 дней, а другие годы имеют 365 дней ((!isleapyear(d)) & (month(d) > 2))
: добавьте 1 к номеру дня, если год не високосный, а дата - конец февраля, таким образом мы нормализуем вселет, чтобы иметь 366 дней (так что одни и те же дни в формате Месяц-День имеют один и тот же номер дня - обратите внимание, что мы должны сдвинуться на +1, начиная с 1 марта по 31 декабря)
Вот краткий пример (обратите внимание, что 2020 - это високосный год, а 2021 - нет):
julia> d = Date.(["2020-02-28", "2020-02-29", "2020-03-01", "2021-02-28", "2021-03-01"])
5-element Array{Date,1}:
2020-02-28
2020-02-29
2020-03-01
2021-02-28
2021-03-01
julia> @. dayofyear(d) + ((!isleapyear(d)) & (month(d) > 2))
5-element Array{Int64,1}:
59
60
61
59
61
Таким образом, для одного и того же значения на оси x на вашем графике у вас всегда будет один и тот же день годана все годы.