ggplot:关于形状美学的两个截然不同的传说

时间:2014-07-21 19:22:53

标签: r ggplot2 legend gantt-chart

如何在ggplot中为形状美学添加第二个图例?

该图表显示了不同的起始类型(形状),不同的过程(颜色)和不同的 结束类型(再次形状)。目前,我只能显示两个图例:一个用于颜色,一个用于形状(合并start.type和end.tpye)。有关如何获取单独的第三个图例(对于end.type)的任何帮助?引入线型作为额外的美学不是一种选择。非常感谢。

id <- c("1","2","3")
start.date <- c("01/01/2010","05/05/2004","01/08/2006")
end.date <- c("31/12/2012","05/05/2007","01/09/2009")
start.type <- c("x1","x2","x3")
end.type <- c("y1","y2","y3")
process.type <- c("p1","p2","p3")
u <- data.frame(id,start.date, end.date,start.type,end.type,process.type)

u.plot <- ggplot(u)+
  geom_segment(aes(color=process.type, x=start.date, xend=end.date, y=id, yend=id), size=1)+
  geom_point(aes(shape=start.type, x=start.date, y=id), size=3)+
  geom_point(aes(shape=end.type, x=end.date, y=id), size=3)

plot(u.plot)

enter image description here

1 个答案:

答案 0 :(得分:4)

enter image description here

编辑传奇可能会很痛苦并且容易被打破,但是如果你必须尝试快速而肮脏的方式

require(gtable)
g = ggplotGrob(u.plot) # calls ggplot_build and ggplot_gtable
a = g$grobs[[8]][["grobs"]][[2]] # extract the legend (a gtable itself)
a = gtable_add_rows(a, unit(c(0.5,1),"line"), 6) # add two rows
new = editGrob(a[["grobs"]][[2]], label = "I'm in") # copy legend title with new text

a = gtable_add_grobs(a, new, 8, l=2, r=5) # place the new title
g$grobs[[8]][["grobs"]][[2]] = a # replace with new legend in the plot
grid.newpage()
grid.draw(g)