superponer - Obtener un diagrama de área apilada en R
superponer graficas en r (3)
Puedes usar stackpoly
desde el paquete 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]))
Esta pregunta es una continuación de la question anterior que hice.
Ahora tengo un caso donde también hay una columna de categoría con Prop. Entonces, el conjunto de datos se vuelve como
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
En este caso, necesito hacer un diagrama de área apilada en R con los porcentajes de estas diferentes categorías para cada día. Entonces, el resultado será similar.
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%
Entonces ahora obtendría la parte de cada Categoría en cada hora y luego trazaré una gráfica de área apilada como esta, donde el eje x es la hora y el eje y el porcentaje de Prop2 para cada categoría dado por los diferentes colores
Puedes usar el paquete ggplot2
de Hadley Wickham para eso.
R> library(ggplot2)
Un conjunto de datos de ejemplo:
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
Y luego puedes usar ggplot
con geom_area
:
R> ggplot(d, aes(x=t,y=val,group=var,fill=var)) + geom_area(position="fill")
Si quiere quitar los bordes, puede usar scale_x_discrete y coord_cartesian de esta manera
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))