364 votes

Le traçage de deux variables, comme les lignes à l'aide de ggplot2 sur le même graphique

Un très newbish question, mais disons que j'ai des données comme ceci:

test_data <- data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
date = seq.Date(as.Date("2002-01-01"), by="1 month", length.out=100))

Comment puis-je tracer les deux séries chronologiques var0 et var1 sur le même graphique, date sur l'axe des x, à l'aide de ggplot2? Les points de Bonus si vous faites var0 et var1 de couleurs différentes, et peuvent inclure une légende!

Je suis sûr que c'est très simple, mais je ne trouve pas d'exemples.

438voto

hadley Points 33766

Pour un petit nombre de variables, vous pouvez utiliser de construire l'intrigue manuellement vous-même:

ggplot(test_data, aes(date)) + 
  geom_line(aes(y = var0, colour = "var0")) + 
  geom_line(aes(y = var1, colour = "var1"))

406voto

rcs Points 22112

L'approche générale consiste à convertir les données au format long (à l'aide d' melt() de colis reshape ou reshape2)

require("reshape")
require("ggplot2")

test_data_long <- melt(test_data, id="date")  # convert to long format

ggplot(data=test_data_long,
       aes(x=date, y=value, colour=variable)) +
    geom_line()

ggplot2 output

12voto

Gavin Simpson Points 72349

L'utilisation de vos données:

test_data <- data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
Dates = seq.Date(as.Date("2002-01-01"), by="1 month", length.out=100))

J'ai créer un empilées version qui est ce que l' ggplot() aimeraient travailler avec:

stacked <- with(test_data,
                data.frame(value = c(var0, var1),
                           variable = factor(rep(c("Var0","Var1"),
                                                 each = NROW(test_data))),
                           Dates = rep(Dates, 2)))

Dans ce cas, la production de stacked a été assez facile que nous avons eu à faire quelques manipulations, mais reshape() et de la reshape et reshape2 peut être utile si vous avez de plus en plus complexe réel de l'ensemble de données à manipuler.

Une fois que les données sont dans ce empilés en forme, il ne nécessite qu'un simple ggplot() appel pour produire de l'intrigue que tu voulais avec tous les extras (une des raisons pour lesquelles de plus haut niveau traçage de paquets comme lattice et ggplot2 sont donc utiles):

require(ggplot2)
p <- ggplot(stacked, aes(Dates, value, colour = variable))
p + geom_line()

Je vais le laisser pour vous de ranger les étiquettes de l'axe, légende, titre, etc.

HTH

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X