2012-05-01 5 views
6

У меня есть некоторые данные соскобленные и переработанные из Интернета в этой форме:Создать неперекрывающийся сложена площадь участок с ggplot2

>head(dat) 
    count name   episode percent 
1 309 don 01-a-little-kiss 0.27081507 
2 220 megan 01-a-little-kiss 0.19281332 
3 158 joan 01-a-little-kiss 0.13847502 
4 113 peggy 01-a-little-kiss 0.09903593 
5 107 roger 01-a-little-kiss 0.09377739 
6 81 pete 01-a-little-kiss 0.07099036 

Я пытаюсь создал стек гистограмму, похожий на тот, здесь: Making a stacked area plot using ggplot2

Когда я делаю

require(RCurl) 
require(ggplot2) 
link <- getURL("http://dl.dropbox.com/u/25609375/so_data/final.txt") 
dat <- read.csv(textConnection(link), sep=' ', header=FALSE, 
      col.names=c('count', 'name', 'episode')) 

dat <- ddply(dat, .(episode), transform, percent = count/sum(count)) 

ggplot(dat, aes(episode, percent, group=name)) + 
    geom_area(aes(fill=name, colour=name), position='stack') 

enter image description here

Я получаю эту странную диаграмму.

Я хочу, чтобы районы не пересекались друг с другом, и чтобы заполнить весь холст, поскольку общий процент для каждого фактора episode равен 100%.

ответ

8

Это было интересно. Вы упускаете один ряд (Lane не появился в чайных листьях ...?), Так

dat2 <- rbind(dat,data.frame(count = 0,name = 'lane', 
        episode = '02-tea-leaves',percent = 0)) 

ggplot(arrange(dat2,name,episode), aes(x = episode,y = percent)) + 
    geom_area(aes(fill=name,group = name), position='stack') 

enter image description here

, кажется, работает. Но это тоже должно было быть в правильном порядке, и я не совсем понимаю, почему.

+0

Большое спасибо. Мне все еще интересно, почему моя работа не работает. – Idr

+0

@idris Недостающая строка, которую я понимаю (хотя может показаться, что вы «означаете», что для этого значения должно быть 0, я думаю, было бы опасно, если бы ggplot предполагал, что глобально). Возможно, упорядочение связано с тем, что он использует geom_polygon под капотом. – joran

+2

@idris Кроме того, я должен добавить, что использование 'geom_bar' может быть проще, поскольку я ожидаю, что он будет вести себя более предсказуемо и отобразит ту же информацию. – joran