R version 3.1.1 (2014-07-10) Platform: i386-w64-mingw32/i386 (32-bit)
Я работаю над барплотом с ggplot2
. Цель состоит в том, чтобы получить для данных комбинацию сложенной и уклоненной гистограммы. Моя проблема заключается в том, чтобы включить легенду, которая включает оба слоя или показывает их по отдельности.
Данные:
df <- structure(list(year = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L,
1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("2008", "2009", "2010",
"2011", "2012", "2013", "2014"), class = "factor"), product = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("a",
"b"), class = "factor"), total = c(1663L, 1344L, 1844L, 444L,
1336L, 897L, 655L, 3433L, 3244L, 2044L, 3344L, 1771L, 1410L,
726L), partial = c(1663L, 1344L, 1844L, 444L, 949L, 302L, 5L,
3433L, 3244L, 2044L, 3344L, 1476L, 1158L, 457L)), .Names = c("year",
"product", "total", "partial"), row.names = c(NA, -14L), class = "data.frame")
План состоял в том, чтобы построить два слоя geom_bar, чтобы объединить уклонение и наложение. Первый слой — общая сумма, второй слой — частичная сумма. Значение альфа для первого слоя уменьшено, чтобы увидеть разницу между двумя слоями. Пока это сработало.
Пример:
ggplot(df, aes(x = year))+
geom_bar(aes(y = total, fill = product), alpha= 0.3, stat = "identity", position = "dodge", width = 0.3)+
geom_bar(aes(y = partial, fill = product), alpha= 1, stat = "identity", position = "dodge", width = 0.3)
Теперь легенды недостаточно. Он показывает цвет fill = product
и не зависит от альфа-значения первого слоя.
Мой подход состоял в том, чтобы использовать scale_fill_manual
и вручную добавить новую метку с новым цветом, что не сработало.
Моя идея:
ggplot(df, aes(x = year))+
geom_bar(aes(y = total, fill = product), alpha= 0.3, stat = "identity", position = "dodge", width = 0.3)+
geom_bar(aes(y = partial, fill = product), alpha= 1, stat = "identity", position = "dodge", width = 0.3)+
scale_fill_manual(name = "",
values=c("red", "black","blue"),
labels=c("a","b","test"))
Спасибо за любую помощь в моей проблеме!