линейчатая диаграмма на одном графике с легендой под ggplot2
Я хотел бы поместить линейку и линейный график из двух отдельных, но связанных рядов на одном графике с легендой (линейный график имеет квартальный рост, линейный график имеет ежегодный рост).
В настоящее время я делаю это с data.frame в широком формате и с кодом следующим образом:
p <- ggplot() +
geom_bar(df, aes(x=Date, y=quarterly), colour='blue') +
geom_line(df, aes(x=Date, y=annual), colour='red')
но я не могу понять, как добавить легенду с красной линией, помеченной как «Ежегодный рост»; и синий квадрат с надписью «Квартальный рост».
В качестве альтернативы, я не могу понять, как иметь разные geoms для разных серий с длинной формой data.frame.
ОБНОВИТЬ:
Следующий пример кода дает мне часть пути к решению, но с действительно уродливой повторяющейся легендой. Все еще ищем законченное решение ... Этот подход основан на том, чтобы поместить данные в полную форму, а затем построить подмножества данных ...
library(ggplot2)
library(reshape)
library(plyr)
library(scales)
### --- make a fake data set
x <- rep(as.Date('2012-01-01'), 24) + (1:24)*30
ybar <- 1:24
yline <- ybar + 1
df <- data.frame(x=x, ybar=ybar, yline=yline)
molten <- melt(df, id.vars='x', measure.vars=c('ybar', 'yline'))
molten$line <- ifelse(molten$variable=='yline', TRUE, FALSE)
molten$bar <- ifelse(molten$variable=='ybar', TRUE, FALSE)
### --- subset the data set
df.line <- subset(molten, line==TRUE)
df.bar <- subset(molten, bar==TRUE)
### --- plot it
p <- ggplot() +
geom_bar(data=df.bar, mapping=aes(x=x, y=value, fill=variable, colour=variable),
stat='identity', position='dodge') +
geom_line(data=df.line, mapping=aes(x=x, y=value, colour=variable)) +
opts(title="Test Plot", legend.position="right")
ggsave(p, width=5, height=3, filename='plot.png', dpi=150)
И пример сюжета ...