Ich möchte zwei Linien mit der gleichen X-Achse, aber unterschiedlichen Y-Achse zeichnen.geom_line mit unterschiedlicher y-Achsenskalierung
Die Konversation hier lesen geom_bar + geom_line: with different y-axis scale? Ich habe den folgenden Code erstellt, um visit_time und item_bought in derselben Grafik zu plotten. Ich habe es geschafft, die sekundäre Achse auf der rechten Seite zu erstellen, aber ich bin nicht in der Lage Farblegende und die y-Achse Etiketten (die man eine der linken funktioniert, aber nicht auf der rechten Seite)
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)
Ich bin hinzufügen Ich bin nicht sicher, ob dies der effizienteste Weg ist, daher bin ich froh, eine andere Methode zu haben. Solange ich zwei Zeilen habe und die y-Achsennamen auf beiden Seiten und die Farblegende lösche.
Vielen Dank im Voraus.
[Dies ist die kanonische Frage] (https://stackoverflow.com/questions/3099219/plot-with-2-y-axes-one-y-axis-on-the-left-and- eine andere y-Achse-auf-der-rechten). Die kurze Antwort ist, dass du es nicht leicht machen kannst, weil Hadley denkt, dass es eine schlechte Idee ist, wie er in seiner Antwort dort erklärt. Er hat es seitdem für Umwandlungen ermöglicht, obwohl z.B. Celcius und Fahrenheit. Es kann, wie Sie gefunden haben, durch Gitter gehackt werden, aber es braucht etwas Arbeit. – alistaire