I want to plot two lines with the same x-axis but different y-axis.
Reading the conversation here geom_bar + geom_line: with different y-axis scale? I have created the following code in order to plot visit_time and item_bought on the same graph. I have managed to create the secondary axis on the right, however I am not able to add color legend and the y-axis labels (the one one the left works, but not on the right)
temp <- data.frame
(day = c("2017-01-01", "2017-01-02", "2017-01-03", "2017-01-04", "2017-01-05", "2017-01-06" ,"2017-01-07" ,"2017-01-08", "2017-01-09", "2017-01-10", "2017-01-11", "2017-01-12", "2017-01-13", "2017-01-14", "2017-01-15", "2017-01-16", "2017-01-17", "2017-01-18", "2017-01-19", "2017-01-20", "2017-01-21", "2017-01-22", "2017-01-23"),
items =c(33,34,12,31,26,45,15,20,30,44,31,48,18,4,12,38,1,3,3,1,6,7,20),
visit_time =c(2, 1, 11, 12, 16, 20, 10, 6, 19, 22, 18, 22, 15, 1, 9, 23, 2, 4, 5, 2, 12, 4, 22))
temp$day <- as.Date(temp$day, "%Y-%m-%d")
p1 = ggplot(temp, aes(day, items)) + geom_line(colour="darkblue", size = 1) +
ylab("items") +
theme(legend.position="none",axis.text.x = element_text(angle = 90, hjust = 0),
panel.background = element_rect(fill = NA),
panel.grid = element_blank())
p2 = ggplot(temp, aes(day, visit_time)) + geom_line(colour="darkorange3", size =1) + ylab("visit_time") +
theme(legend.position="none",axis.text.x = element_text(angle = 90, hjust = 0),
panel.background = element_rect(fill = NA),
panel.grid = element_blank())
g1 <- ggplot_gtable(ggplot_build(p1))
g2 <- ggplot_gtable(ggplot_build(p2))
# overlap the panel of 2nd plot on that of 1st plot
pp <- c(subset(g1$layout, name == "panel", se = t:r))
g <- gtable_add_grob(g1, g2$grobs[[which(g2$layout$name == "panel")]], pp$t,
pp$l, pp$b, pp$l)
# axis tweaks
ia <- which(g2$layout$name == "axis-l")
ga <- g2$grobs[[ia]]
ax <- ga$children[[2]]
ax$widths <- rev(ax$widths)
ax$grobs <- rev(ax$grobs)
ax$grobs[[1]]$x <- ax$grobs[[1]]$x - unit(1, "npc") + unit(0.15, "cm")
g <- gtable_add_cols(g, g2$widths[g2$layout[ia, ]$l], length(g$widths) - 1)
g <- gtable_add_grob(g, ax, pp$t, length(g$widths) - 1, pp$b)
# draw it
grid.draw(g)
I am not sure this is the most efficient way, so I am happy to have another methodology. As long as I have two lines and clear y-axis names on both side and color legend.
Many thanks in advance.