这会让你更进一步(我没有添加线条),但它非常体力劳动。
在主要剧情,我:
- 使用随机种子,使其可重复:-)
- 预先计算的M/F每天
- 旋转X轴标签计数(只用一天短名称)
- 展开情节利润率容纳额外的X轴注释
然后我:
- 产生,并通过
annotation_custom
- 添加非旋转,在月日#的产生,并通过
annotation_custom
- 添加非旋转月份数字建立最终的情节电网结构
- 关闭该面板夹RECT
- 绘制图形与
grid.draw
你prbly想间距a位打。
这应该足以让你去(并且添加行应该是lineGrob
非常适合)。
library(dplyr)
library(ggplot2)
library(scales)
library(grid)
library(gridExtra)
set.seed(1492) # reproducible
df = data.frame(dates = Sys.Date() + sample(-10:25, 100, replace = T),
sex = sample(c("M", "F"), 25, replace = T))
# pre-compute the M/F counts per date
df.2 <- df %>% group_by(dates, sex) %>% summarise(count=n())
gg <- ggplot(df.2, aes(x=dates, y=count, fill=sex))
gg <- gg + geom_bar(color="black", position="stack", stat="identity")
gg <- gg + scale_x_date(breaks="1 day",
labels=date_format("%a"),
limits = xlmts)
gg <- gg + labs(x=NULL)
gg <- gg + theme_bw()
gg <- gg + theme(axis.text.x=element_text(angle = 90, hjust = 1))
gg <- gg + theme(plot.margin=unit(c(1,1,5,1), "line"))
gg1 <- gg # keep base plot
# make & plot the day #'s
for (d in seq(from=as.Date("2014-09-06"), to=as.Date("2014-11-01"), by="1 day")) {
d1 <- format(as.Date(d, origin="1970-01-01"), "%d")
gg1 <- gg1 + annotation_custom(grob=textGrob(d1, hjust=0, gp=gpar(cex=0.7)), ymin=-0.8, ymax=-0.8,
xmin=as.numeric(d), xmax=as.numeric(d))
}
# add month numbners
gg1 <- gg1 + annotation_custom(grob=textGrob("9", gp=gpar(cex=0.8)), ymin=-1.0, ymax=-1.0,
xmin=as.numeric(as.Date("2014-09-17")), xmax=as.numeric(as.Date("2014-09-17")))
gg1 <- gg1 + annotation_custom(grob=textGrob("10", gp=gpar(cex=0.8)), ymin=-1.0, ymax=-1.0,
xmin=as.numeric(as.Date("2014-10-12")), xmax=as.numeric(as.Date("2014-10-12")))
# build the plot
gg2 <- ggplot_gtable(ggplot_build(gg1))
# no panel clipping
gg2$layout$clip[gg2$layout$name=="panel"] <- "off"
# draw the plot
grid.draw(gg2)
哎呀。看起来我并没有为这一年做一个'annotation_custom',但是基于示例中的其他位很容易添加 – hrbrmstr 2014-09-30 13:35:58