2012-05-03 4 views
0

J'essaie de créer un graphique linéaire superposé dans ggplot2 avec des valeurs positives empilées au-dessus de l'axe x et des valeurs négatives empilées séparément sous l'axe x. J'ai réussi à empiler chacun des types de lignes séparément, mais je n'ai pas réussi à les avoir tous les deux sur une seule parcelle. Je cherche de l'aide sur la façon dont je peux le faire, soit en superposant des parcelles, soit en faisant quelque chose de créatif sur une seule parcelle.Lignes combinées lignes positives et négatives combinées

Mon code ci-dessous utilise un simple ggplot avec un tracé geom_line empilé. La moitié des «Types» sont des valeurs positives par rapport au temps et l'autre moitié des «Types» sont toutes des valeurs négatives.

p <- ggplot(dataForm, aes(x=Time,y=Value,group=Type),colour=factor(Type)) 
    p + geom_line(aes(fill = Type),position = "stack") 

J'ai essayé une alternative de spécifier les valeurs positives et négatives séparément sans succès:

p <- ggplot(dataForm, aes(x=Time,y=Value,group=Type),colour=factor(Type)) 
    p + geom_line(data = data1,aes(fill = Type),position = "stack") 
    p + geom_line(data = data1,aes(fill = Type),position = "stack") 

Des conseils sur la façon de le faire est grandement appréciée. Merci.

+3

[Exemples reproductibles] (http://stackoverflow.com/q/5963269/324364) sont comme l'alcool par ici. Ils relâchent tout le monde et les encouragent à parler. Astuce indice de soupçon. – joran

Répondre

5

En l'absence de a reproducible example, je me suis adapté this example from learnr:

library(ggplot2) 
library(plyr) 

data = read.table(text="Time Type Value 
1 a 8 
2 a 10 
3 a 10 
4 a 5 
5 a 3 
1 b 9 
2 b 5 
3 b 7 
4 b 8 
5 b 3 
1 c -3 
2 c -1 
3 c -5 
4 c -4 
5 c -7 
1 d -11 
2 d -3 
3 d -9 
4 d -6 
5 d -6", header=TRUE) 

p <- ggplot(data, aes(x=Time)) 
p <- p + geom_line(subset = .(Type %in% c('a', 'b')), 
        aes(y=Value, colour = Type), 
        position = 'stack') 
p <- p + geom_line(subset = .(Type %in% c('c', 'd')), 
        aes(y=Value, colour = Type), 
        position = 'stack') 
p 

Pour produire ceci:

Stacked line chart

Et, pour faire bonne mesure, un graphique de la zone avec une ligne horizontale:

p <- ggplot(data, aes(x=Time)) 
p <- p + geom_area(subset = .(Type %in% c('a', 'b')), 
        aes(y=Value, fill=Type), 
        position = 'stack') 
p <- p + geom_area(subset = .(Type %in% c('c', 'd')), 
        aes(y=Value, fill = Type), 
        position = 'stack') 
p <- p + geom_hline(yintercept=0) 
p 

area chart

Questions connexes