ggplot2 geom_area意外地绘制(以错误的地方结束)

时间:2014-11-25 20:35:12

标签: r ggplot2

我正在使用ggplot2使用geom_area绘制以下数据。这些值设计为x轴镜像。但是狗的情节结束并没有反映出来。

enter image description here

但正如你可以从这个数据框中看到的那样,狗应该在x = 100和y = 0时结束,但它似乎以x = 100和y = 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

2 个答案:

答案 0 :(得分:4)

我得到同样的错误...... 另一种可能的解决方法是使用geom_ribbon

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

这也给出了正确的情节:

答案 1 :(得分: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