2014-11-25 2 views
8

Я использую ggplot2 для построения следующих данных, используя geom_area. Значения предназначены для зеркального отображения оси x. Но конец сюжета для собаки не отражен.ggplot2 geom_area участки неожиданно (заканчивается в неправильном месте)

enter image description here

Но, как вы можете видеть из этого кадра данных собаки должен заканчиваться на й = 100 и у = 0, но это, кажется, заканчивается й = 100 и у = 100 (см последней строки)

Как я могу точно сделать кошку для собак?

 x y animal 
1 100.0 100 cat 
2 90.0 89 cat 
3 84.0 85 cat 
4 55.5 60 cat 
5 28.3 37 cat 
6 27.0 32 cat 
7 18.0 25 cat 
8 0.0 0 cat 
9 0.0 100 dog 
10 10.0 89 dog 
11 16.0 85 dog 
12 44.5 60 dog 
13 71.7 37 dog 
14 73.0 32 dog 
15 82.0 25 dog 
16 100.0 0 dog 


dat <- structure(list(x = c(100, 90, 84, 55.5, 28.3, 27, 18, 0, 0, 10, 
    16, 44.5, 71.7, 73, 82, 100), y = c(100, 89, 85, 60, 37, 32, 
    25, 0, 100, 89, 85, 60, 37, 32, 25, 0), animal = c("cat", "cat", 
    "cat", "cat", "cat", "cat", "cat", "cat", "dog", "dog", "dog", 
    "dog", "dog", "dog", "dog", "dog")), class = "data.frame", row.names = c(NA, 
    -16L), .Names = c("x", "y", "animal")) 

library(ggplot2) 
ggplot(dat) + theme_bw() + 
    geom_area(aes(x=x, y=y, group=animal, fill=animal), alpha=.3) 

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

ggplot(subset(dat, animal=="dog")) + theme_bw() + 
    geom_area(aes(x=x, y=y, group=animal, fill=animal), alpha=.3) 

enter image description here

+0

'geom_line' работает должным образом, что может быть подсказкой, как это делает Подменю просто«кошки». Я использую ggplot2_1.0.0 –

+0

Не уверен, имеет ли это какое-либо значение/релевантность, но если вы удалите, например, первую строку данных, она работает как ожидалось (но, конечно, кошка выглядит по-другому из-за недостающей точки данных. .) –

+2

добавить 'order = y' в' aes' или 'dat [order (dat $ y),]' (PS у меня нет объяснений;)) – user20650

ответ

3

Я не уверен, почему вы получите, что неожиданный результат. У меня такой же странный сюжет.

Возможный способ обхода:

ggplot() + 
    geom_area(data=dat[dat$animal=="dog",], aes(x=x, y=y, fill="red"), alpha=.3) + 
    geom_area(data=dat[dat$animal=="cat",], aes(x=x, y=y, fill="blue"), alpha=.3) + 
    scale_fill_discrete("Animal",breaks=c("red","blue"),labels=c("dog","cat")) + 
    theme_bw() 

, которая дает желаемый результат: enter image description here

4

я получаю ту же ошибку ... Другая возможная работа вокруг использования geom_ribbon.

ggplot(dat) + theme_bw() + 
geom_ribbon(aes(x = x, ymin = 0, ymax = y, group = animal, fill = animal, position = "stack"), alpha=.3) 

Это также дает правый график :