2010-03-02 6 views
4

J'essaie de générer un tracé de zone empilé, mais à la place, ggplot fait des zones de chevauchement. J'ai essayé d'autres exemples qui me paraissent analogues, mais ils fonctionnent et pas les miens.ggplot2 geom_area chevauchement au lieu d'empiler

> cx 
     date type visitors 
1 2009-11-23 A  2 
2 2010-01-07 A  4 
3 2010-01-09 A  6 
4 2010-02-07 A  8 
5 2009-12-02 B  2 
6 2009-12-03 B  4 
7 2009-12-11 B  6 
8 2010-01-20 B  8 
9 2010-01-26 B  10 
10 2010-01-30 B  11 
11 2010-02-01 B  12 
12 2009-12-07 LU  2 
13 2009-12-28 LU  4 
14 2010-01-27 LU  7 
15 2010-02-04 L  1 
16 2010-02-22 L  2 
17 2009-11-14 O  2 
18 2009-11-27 O  4 
19 2010-01-11 O  6 
20 2010-01-13 O  8 
21 2010-02-10 O  9 
22 2009-11-24 R  2 
23 2009-12-01 R  4 
24 2009-12-13 R  6 
25 2009-12-14 R  8 
26 2010-01-03 R  10 
27 2010-01-16 R  12 
28 2010-02-06 R  13 
29 2010-02-08 R  15 
30 2009-11-15 T  2 
31 2009-11-19 T  4 
32 2009-11-25 T  6 
33 2009-11-26 T  8 
34 2009-12-09 T  10 
35 2009-12-10 T  12 
36 2009-12-15 T  14 
37 2009-12-19 T  16 
38 2009-12-22 T  18 
39 2010-02-23 T  19 
40 2010-02-24 T  20 
41 2010-01-21 Tr  2 
42 2010-01-23 Tr  4 
43 2010-01-24 Tr  6 
44 2010-01-06 U  2 
45 2009-11-09 V  2 
46 2009-11-18 V  4 
47 2009-12-16 V  6 
48 2009-12-23 V  8 
49 2009-12-25 V  10 
50 2010-01-02 V  12 
51 2010-01-12 V  14 
52 2010-01-14 V  16 
53 2010-01-15 V  18 
54 2010-01-17 V  20 
55 2010-01-19 V  22 
56 2010-01-25 V  25 
57 2010-02-05 V  26 
> ggplot(cx) + geom_area(aes(x=date, y=visitors, fill=type), position="stack") 

Cela donne un terrain où chaque type est tracée en sa propre zone, et ceux-ci sont recouvertes au lieu de empilée. Si je les corrige correctement, j'obtiens ensuite une série de plus petites zones à l'intérieur, mais ce n'est pas ce que je cherche.

J'ai essayé différents arguments de position, en vain.

Comment puis-je obtenir les zones empilées?

Répondre

7

J'ai trouvé la solution. Le problème est qu'il n'y a pas de valeurs pour chaque type pour chaque date, c'est-à-dire qu'il existe des valeurs x pour lesquelles certains niveaux de type n'ont pas d'entrée. Par exemple, type = V a visiteurs = 20 au 2010-01-17, et visiteurs = 22 au 2010-01-19, donc j'ajouterais aussi visiteurs = 20 pour le 2010-01-18.

Mes données ont été obtenues à l'aide d'acteurs du paquet Reshape, alors que la mise en add.missing = T comme un indicateur fixe mes questions:

cx <- cast(visitors.melt, type+date~., length, add.missing=T) 
names(cx)[3] <- "visitors" 
cx <- ddply(cx, .(type), function(x) data.frame(date=x$date, visitors=cumsum(x$visitors)))