我一直在尝试扩展 my own answer on drawing Gantt Charts到更一般的情况。我在这里说明了部分结果:
此图表上绘制了多次行程,红点代表出发,绿点代表返回。现在这是我的挑战:
用下面的代码生成这个图很简单,而且很容易用一条从红色到绿色的线连接点,两者都发生在同一个月。任何人都可以以一种足以承受闰年和非闰年等的一般方式帮助解决环绕的情况吗?
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)
最佳答案
可能不是完美的解决方案,但是当您使用 date
时,您会认为变得容易得多。对象:
# using your data.frame
# create date object using the dep_month, dep_day etc columns
df$dep.date = as.Date(paste('2012', df$dep_month, df$dep_day, sep='-'))
df$ret.date = as.Date(paste('2012', df$ret_month, df$ret_day, sep='-'))
# calculate the dates for the gray data points between departure and return
# there is probably a more R'ish ways, than a for loop
days <- NULL
for(i in seq(1, nrow(df))){
tmp <- seq.Date(df[i,]$dep.date, df[i,]$ret.date, by='days')
days <- rbind(days,
data.frame(day = as.POSIXlt(tmp)$mday,
mon = as.POSIXlt(tmp)$mon+1))
}
# plot it
p <- ggplot( days, aes(day, mon)) + geom_point(colour='gray66') + theme_bw() +
geom_point(data = df, aes(dep_day, dep_month), colour = 'red', size = 6) +
geom_point(data = df, aes(ret_day, ret_month ),
colour = 'green', size = 4 ) +
scale_x_continuous( breaks = c(1:31) ) +
scale_y_reverse( breaks = c(1:12) ) +
ylab("Month") + xlab("Day")
print(p)
关于r - 在 R 中绘制年度计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10537500/