Obtention d'une parcelle empilée en R
cette question Est la suite de la précédente question j'ai demandé.
maintenant j'ai un cas où il y a aussi une colonne de catégorie avec Prop. Ainsi, l'ensemble de données devient comme
Hour Category Prop2
00 A 25
00 B 59
00 A 55
00 C 5
00 B 50
...
01 C 56
01 B 45
01 A 56
01 B 35
...
23 D 58
23 A 52
23 B 50
23 B 35
23 B 15
dans ce cas, je dois faire une parcelle de surface empilée dans R avec les pourcentages de ces différentes catégories pour chaque jour. Alors, le résultat sera comme.
A B C D
00 20% 30% 35% 15%
01 25% 10% 40% 25%
02 20% 40% 10% 30%
.
.
.
20
21
22 25% 10% 30% 35%
23 35% 20% 20% 25%
donc maintenant j'aurais la part de chaque Catégorie dans chaque heure et puis parcelle il s'agit d'une parcelle empilée comme celle - ci où l'axe des abscisses est l'heure et l'axe des ordonnées le pourcentage de Prop2 pour chaque catégorie donnée par les différentes couleurs
"3 réponses
vous pouvez utiliser le paquet ggplot2
de Hadley Wickham pour ça.
R> library(ggplot2)
ensemble de données type:
R> d <- data.frame(t=rep(0:23,each=4),var=rep(LETTERS[1:4],4),val=round(runif(4*24,0,50)))
R> head(d,10)
t var val
1 0 A 1
2 0 B 45
3 0 C 6
4 0 D 14
5 1 A 35
6 1 B 21
7 1 C 13
8 1 D 22
9 2 A 20
10 2 B 44
et ensuite vous pouvez utiliser ggplot
avec geom_area
:
R> ggplot(d, aes(x=t,y=val,group=var,fill=var)) + geom_area(position="fill")
vous pouvez utiliser stackpoly
du paquet plotrix
:
library(plotrix)
#create proportions table
pdat <- prop.table(xtabs(Prop2~Hour+Category,Dat),margin=1)
#draw chart
stackpoly(pdat,stack=T,xaxlab=rownames(pdat))
#add legend
legend(1,colnames(pdat),bg="#ffffff55",fill=rainbow(dim(pdat)[2]))
si vous voulez enlever les frontières, vous pouvez utiliser scale_x_discrete et coordin_cartesian this way
p <- ggplot(d, aes(x=Date,y=Volume,group=Platform,fill=Platform)) + geom_area(position="fill")
base_size <- 9
p + theme_set(theme_bw(base_size=9)) + scale_x_discrete(expand = c(0, 0)) + coord_cartesian(ylim=c(0,1))