Построить несколько наборов данных с lubridate или масштабами - PullRequest
0 голосов
/ 29 января 2019

Я создал три набора данных (banks2016, banks2017, banks2018, отфильтрованные по году. Я сделал один график с тремя наборами данных, поэтому три разные линии с разными цветами.

Проблема, с которой я столкнулся, заключается в том, что, учитывая еженедельные транзакции, у меня есть четыре балла за каждый месяц за этот конкретный месяц, например, если я получил платеж d 1-1-16, 8-1-16, 15-1-16, 22-1-16, онивсе показывается на январской линии. В идеале я хотел бы, чтобы линия и точка проходили между январем и февралем.

Я пробовал несколько разных вещей, включая использование scales package date_breaks. I 'Я пытался изменить способ использования lubridate, но безрезультатно. Есть предложения?

Ниже приведен мой код.

ggplot(rbind(banks2016,banks2017,banks2018), 
       aes(month(Date, label=TRUE, abbr=TRUE), Balance, 
       group = factor(year(Date)), colour=factor(year(Date)))) +  
  geom_line() +
  geom_point() +
  labs(x="Month", colour="Year") +
  theme_classic()

и dput для банков2016. Я хочу построить графикитоговое сальдо на основе даты. Таким образом, одна непрерывная строка неделя за неделей, но x lab - месяц. При более внимательном рассмотрении данных теперь даты не всегда еженедельно, как я изначально думал. Возможно, мне придется переделывать данные.

struct(список (Дата = структура (c (17038, 17038, 17038, 17031, 17029, 17024, 17022, 17017, 17017, 17014, 17009, 17008, 16996, 16989, 16989, 16987, 16987, 16987, 16983), класс= "Дата"), Дебеты = c (NA, NA, 1686451.25, NA, NA, 3111755.91, NA, NA, 25100, 3.66, NA, NA, 313.26, NA, 1566.27, NA, NA, NA, 0.8), Кредиты= c (14693,48, 10250, NA, 409,25, 5655863,07, NA, 2304,45, 2443, NA, NA, 300, 122, NA, 8716,45, NA, 30000, 25000, 5993,6, NA), Balance = c (15824841.24, 15810147.76,+15799897,76, +17486349,01, +17485939,76, +11830076,69, 14941832,6, +14939528,15, +14937085,15, +14962185,15, +14962188,81, +14961888,81, +14961766,81, +14962080,07, +14953363,62, +14954929,89, +14924929,89, +14899929,89, +14893936,29)), row.names = с (NA, -19L), класс ="data.frame")

1 Ответ

0 голосов
/ 31 января 2019

Звучит так, как будто вы хотите, чтобы ось х показывала январь - декабрь, а каждая строка отображала баланс по времени для отдельного календарного года;это правильно?Если это так, то один метод (описанный в этот превосходный ответ ) состоит в создании нового столбца дат, который помещает все даты в одном и том же году и наносит их на график, но группирует по году в реальной дате.Вот как это будет выглядеть для вашего набора данных:

library(ggplot2)
library(lubridate)
library(dplyr)

# Posted dataset.
banks = structure(list(Date = structure(c(17038, 17038, 17038, 17031, 17029, 17024, 17022, 17017, 17017, 17014, 17009, 17008, 16996, 16989, 16989, 16987, 16987, 16987, 16983), class = "Date"), Debits = c(NA, NA, 1686451.25, NA, NA, 3111755.91, NA, NA, 25100, 3.66, NA, NA, 313.26, NA, 1566.27, NA, NA, NA, 0.8), Credits = c(14693.48, 10250, NA, 409.25, 5655863.07, NA, 2304.45, 2443, NA, NA, 300, 122, NA, 8716.45, NA, 30000, 25000, 5993.6, NA), Balance = c(15824841.24, 15810147.76, 15799897.76, 17486349.01, 17485939.76, 11830076.69, 14941832.6, 14939528.15, 14937085.15, 14962185.15, 14962188.81, 14961888.81, 14961766.81, 14962080.07, 14953363.62, 14954929.89, 14924929.89, 14899929.89, 14893936.29)), row.names = c(NA, -19L ), class = "data.frame")
# The posted dataset is for only one year (2016).  Duplicate it for 2017 and
# 2018, and change the balances a bit, so we can see the grouping.
banks = bind_rows(
  banks,
  banks %>%
    mutate(Date = Date + years(1),
           Balance = Balance * 1.1),
  banks %>%
    mutate(Date = Date + years(2),
           Balance = Balance * 1.2)
)

# Add a utility "date for plotting" field that puts all the dates in the year
# 2000.
banks = banks %>%
  mutate(DateToPlot = Date - years(year(Date) - 2000))

# Plot Balance as a function of DateToPlot.  Group/color by year.  Make the
# x-axis labels look pretty.
ggplot(banks, 
       aes(x = DateToPlot, y = Balance,
           group = factor(year(Date)), colour=factor(year(Date)))) +  
  geom_line() +
  geom_point() +
  scale_x_date(date_breaks = "1 month",
               date_labels = "%B") +
  labs(x="Month", colour="Year") +
  theme_classic()
...