Легенды ggplot - изменение меток, порядка и названия
Я изо всех сил стараюсь изменить легенду в моем сюжете. Вот воспроизводимый пример:
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))
Мой сюжет генерируется так:
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'))
который производит это:
Теперь, что я хотел бы сделать, это
- изменить название легенды
- изменить порядок отображения элементов легенды
- изменить текст элементов легенды.
Я часами возился, пытаясь это сделать, но без особого успеха. Лучшее, что мне удалось сделать, это добавить это:
scale_colour_hue(name = "Model 1",
breaks=c("mb", "ma", "mc"),
labels=c("MBB", "MAA", "MCC"))
Но это производит эту мерзость:
Как видите, теперь появилась лишняя ненужная легенда, а фигуры в легенде не совпадают с фигурами на сюжете!
Наконец, я хотел бы, чтобы на графике в легенде было указано, что синие и зеленые линии пунктирные, а не сплошные, - но я совершенно не представляю, как это сделать.
Любая помощь будет высоко оценена,
1 ответ
Вам нужно сделать две вещи:
- Переименуйте и измените порядок уровней факторов перед сюжетом.
- Переименуйте заголовок каждой легенды в тот же заголовок
Код:
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")
Тем не менее, я думаю, что это действительно уродливо, а также трудно интерпретировать. Гораздо лучше использовать грани:
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)