ggplot 图例 - 更改标签、顺序和标题 [英] ggplot legends - change labels, order and title
问题描述
我正在努力修改我的情节中的图例.这是一个可重现的示例:
I'm struggling a great deal to modify the legend in my plot. Here is a reproducible example:
dtt <- structure(list(model = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("ma", "mb", "mc"), class = "factor"), year = c(2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L), V = c(0.16, 0.14, 0.11, 0.13, 0.15, 0.16, 0.24, 0.17, 0.12, 0.13, 0.15, 0.15, 0.2, 0.16, 0.11, 0.12, 0.12, 0.15), lower = c(0.11, 0.11, 0.07, 0.09, 0.11, 0.12, 0.16, 0.12, 0.04, 0.09, 0.09, 0.11, 0.14, 0.1, 0.07, 0.08, 0.05, 0.1), upper = c(0.21, 0.19, 0.17, 0.17, 0.19, 0.2, 0.29, 0.23, 0.16, 0.17, 0.16, 0.2, 0.26, 0.27, 0.15, 0.16, 0.15, 0.19)), .Names = c("model", "year", "V", "lower", "upper"), class = "data.frame", row.names = c(NA, -18L))
我的情节是这样生成的:
My plot is generated like this:
ggplot(dtt, aes(x=year, y=V, group = model, colour = model, ymin = lower, ymax = upper)) +
geom_ribbon(alpha = 0.35, linetype=0)+
geom_line(aes(linetype=model), size = 1.5) +
geom_point(aes(shape=model), fill = "white", size = 4) +
theme(legend.position=c(.6,0.8)) +
theme(legend.background = element_rect(colour = 'black', fill = 'grey90', size = 1, linetype='solid'))
产生这个:
现在,我想做的是
- 更改图例的标题
- 更改图例项出现的顺序
- 更改图例项的文本.
我已经折腾了几个小时试图做到这一点,但没有取得多大成功.到目前为止,我管理的最好的是添加以下内容:
I have fiddled around for hours trying to do this, but without much success. The best I have managed so far is to add this:
scale_colour_hue(name = "Model 1",
breaks=c("mb", "ma", "mc"),
labels=c("MBB", "MAA", "MCC"))
但它产生了这种可憎的:
But it produces this abomination:
如您所见,现在多了一个不需要的图例,图例中的形状与情节中的形状不匹配!
As you see, there is now an extra unneeded legend, and the shapes in the legend do not match those in the plot !
最后,我想用图例中的图形来表示蓝线和绿线是虚线,而不是实线 - 但我完全不知道该怎么做.
Finally, I would like to graphics in the legend to indicate that the blue and green lines are dashed, not solid - but I have no idea at all how to do that.
非常感谢任何帮助,
推荐答案
你需要做两件事:
- 在绘图前重命名和重新排序因子水平
- 将每个图例的标题重命名为相同的标题
代码:
dtt$model <- factor(dtt$model, levels=c("mb", "ma", "mc"), labels=c("MBB", "MAA", "MCC"))
library(ggplot2)
ggplot(dtt, aes(x=year, y=V, group = model, colour = model, ymin = lower, ymax = upper)) +
geom_ribbon(alpha = 0.35, linetype=0)+
geom_line(aes(linetype=model), size = 1) +
geom_point(aes(shape=model), size=4) +
theme(legend.position=c(.6,0.8)) +
theme(legend.background = element_rect(colour = 'black', fill = 'grey90', size = 1, linetype='solid')) +
scale_linetype_discrete("Model 1") +
scale_shape_discrete("Model 1") +
scale_colour_discrete("Model 1")
然而,我认为这真的很丑陋,也很难解释.使用facet要好得多:
However, I think this is really ugly as well as difficult to interpret. It's far better to use facets:
ggplot(dtt, aes(x=year, y=V, group = model, colour = model, ymin = lower, ymax = upper)) +
geom_ribbon(alpha=0.2, colour=NA)+
geom_line() +
geom_point() +
facet_wrap(~model)
这篇关于ggplot 图例 - 更改标签、顺序和标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!