Получение участка сложенной области в R
Этот вопрос является продолжением предыдущего вопроса, который я задавал.
Теперь у меня есть случай, когда есть столбец категории с проп. Таким образом, набор данных становится
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
В этом случае мне нужно сделать график с областями с накоплением в R с процентами этих разных категорий для каждого дня. Итак, результат будет похож.
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%
Так что теперь я получу долю каждой категории в каждом часе, а затем построю график на графике с накоплением, например, где ось X - это час, а ось Y - процент проп2 для каждой категории, заданный разными цветами.
3 ответа
Вы можете использовать ggplot2
пакет от Хэдли Уикхем за это.
R> library(ggplot2)
Пример набора данных:
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
И тогда вы можете использовать ggplot
с geom_area
:
R> ggplot(d, aes(x=t,y=val,group=var,fill=var)) + geom_area(position="fill")
Ты можешь использовать stackpoly
от 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]))
Если вы хотите убрать границы, вы можете использовать scale_x_discrete и ordin_cartesian таким образом
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))