Próbowałem przedłużyć my own answer on drawing Gantt Charts do bardziej ogólnego przypadku. I przedstawiono częściowy rezultat tutaj:Wykreślanie rocznego terminarza w R
Wiele wycieczek są kreślone na tym wykresie, z czerwonymi punktami reprezentującymi wylotach i zielonych kropek zwrot. Oto moje wyzwanie:
- Chciałbym zaznaczyć wszystkie dni między odejściem a powrotem za pomocą szarego punktu i pozostawić wszystkie pozostałe nietknięte.
- Chciałbym, aby punkty poprawnie obejmowały różne długości miesięcy (np. Wyjazd 28 czerwca oznaczałby dni do 30 czerwca, a następnie zawijał do 1 lipca).
- Scenariusz nie powinien zawieść w przypadku jednodniowej wycieczki (np. Podróży na początku września, kiedy odlot i powrót odbywają się tego samego dnia, a mniejsza zielona kropka jest umieszczana na większym czerwonym znaczniku).
To jest trywialne, aby utworzyć ten wykres z poniższym kodem, a łatwo byłoby połączyć kropki z linią od czerwonego do zielonego, gdzie oba mają miejsce w tym samym miesiącu. Czy ktokolwiek może pomóc w przypadku zawijania w sposób na tyle ogólny, aby wziąć na siebie także lata skaczące i nieskrępowane?
library("ggplot2")
# ----------------
# LOAD DATA
df <- read.table(text='id,dep_month,dep_day,ret_month,ret_day
c,1,5,1,16
v,2,1,2,6
a,3,28,3,31
z,4,9,4,11
y,4,25,5,3
f,6,28,7,7
w,8,19,8,29
b,9,9,9,9
k,9,29,10,6
n,11,20,12,3', header = TRUE,
sep = ',')
# ----------------
# DRAW YEAR CHART
p <- ggplot(data = df,
aes(x = dep_day,
y = dep_month
)
)
p <- p + theme_bw()
p <- p + geom_point(colour = 'red',
size = 6)
p <- p + geom_point(aes(x = ret_day,
y = ret_month
),
colour = 'green',
size = 4
)
p <- p + scale_x_continuous(breaks = c(1:31))
p <- p + scale_y_reverse(breaks = c(1:12))
p <- p + ylab("Month") + xlab("Day")
print(p)
Dzięki @smu, to najbardziej elegancki, dużo lepiej niż którykolwiek z moje wysiłki. – gauden