Создание участка с областями с помощью ggplot2 - PullRequest
12 голосов
/ 10 января 2011

Я использую следующую структуру данных, чтобы попытаться создать диаграмму с накоплением областей:

df <- data.frame(PopDen = c( 0.002279892, 0.002885407, 0.004291351, 0.002457731, 0.006631572, 0.007578882, 0.004465446, 0.007436628, 0.009001456, 0.006951703, 0.003602076, 0.005695585, 0.005819783, 0.007412274, 0.004931548, 0.006257411, 0.008635908, 0.005438558, 0.002251421,0.006438558), DomArea = c( 253500, 135270, 197180, 131590, 142210, 166920, 125640, 184600, 139940, 126280, 127760, 190940, 133440, 143510, 117260, 69340, 143620, 127480, 181970,164180), PR_Cat = c( "High", "High", "Low", "Low", "Low", "Low", "Low", "Low", "High", "High", "Medium", "Medium", "Medium", "Low", "Low", "Medium", "Medium", "Low", "Low","Low") )

p <- ggplot(df, aes(PopDen, order(DomArea), colour = PR_Cat))  
p + geom_area(aes(colour = PR_Cat, fill= PR_Cat), position = 'stack')

Однако я не понимаю, как складывать области друг над другом; на данный момент они перекрываются. Я предполагаю, что мне нужен аргумент position = 'stack', но график выглядит одинаково независимо от того, включен он или нет.

Также возможно ли заказать DomArea по одной из категорий в PR_Cat или мне нужно будет реорганизовать мои данные?

1 Ответ

23 голосов
/ 11 января 2011

Я не уверен, что вы здесь чертите, но разве вы не хотите, чтобы график PopDen шел по оси y , а не по оси x ?Вы можете заказать DomArea по каждой категории PR_Cat, используя ddply из пакета plyr, и затем укладка работает следующим образом: EDIT Я понял, что вы, вероятно, хотитеграфик должен быть сложен в порядке Low, Medium High, поэтому нам нужно сначала принудительно установить этот порядок на коэффициент PR_Cat, выполнив:

df$PR_Cat <- ordered( df$PR_Cat, levels = c('Low', 'Medium', 'High'))

А теперь создайте столбец DomAreaByCat, используя ddply:

df <- ddply(df, .(PR_Cat), transform, DomAreaByCat = order(DomArea))

Ваш df будет выглядеть следующим образом:

> df
        PopDen DomArea PR_Cat DomAreaByCat
1  0.004291351  197180    Low            8
2  0.002457731  131590    Low            5
3  0.006631572  142210    Low            9
4  0.007578882  166920    Low            2
5  0.004465446  125640    Low            3
6  0.007436628  184600    Low            7
7  0.007412274  143510    Low           11
8  0.004931548  117260    Low            4
9  0.005438558  127480    Low           10
10 0.002251421  181970    Low            6
11 0.006438558  164180    Low            1
12 0.003602076  127760 Medium            4
13 0.005695585  190940 Medium            1
14 0.005819783  133440 Medium            3
15 0.006257411   69340 Medium            5
16 0.008635908  143620 Medium            2
17 0.002279892  253500   High            4
18 0.002885407  135270   High            2
19 0.009001456  139940   High            3
20 0.006951703  126280   High            1

И тогда вы можете сделать график с областями с накоплением следующим образом:

p <- ggplot(df, aes( DomAreaByCat, PopDen))

p + geom_area(aes(colour = PR_Cat, fill= PR_Cat), position = 'stack')   

alt text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...