geom_ribbon错误:美学必须是长度之一 [英] geom_ribbon error: Aesthetics must either be length one

查看:567
本文介绍了geom_ribbon错误:美学必须是长度之一的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题类似于



我想为每个组填写红色和蓝色。



我试过:

  gg1 < -  ggplot_build(g1) 
df2 < - data.frame(x = gg1 $ data [[1]] $ x,
ymin = gg1 $ data [[1]] $ y,
ymax = gg1 $ data = [数据= df2,aes(x = x,ymin = ymin,ymax = ymax),fill =gray,alpha = 0.4)

但是它给了我错误:美学必须是长度为1或与dataProblems长度相同



每当我的geom_ribbon()数据和ggplot()数据不同时,我都会得到同样的错误。



有人可以帮我吗?非常感谢!



我的数据如下所示:

 > NVIQ_predict 
cognisage预测上限较低组
1 7 39.04942 86.68497 18.00000 1
2 8 38.34993 82.29627 18.00000 1
3 10 37.05174 74.31657 18.00000 1
4 11 36.45297 70.72421 18.00000 1
5 12 35.88770 67.39555 18.00000 1
6 13 35.35587 64.32920 18.00000 1
7 14 34.85738 61.52322 18.00000 1
8 16 33.95991 56.68024 18.00000 1
9 17 33.56057 54.63537 18.00000 1
10 18 33.19388 52.83504 18.00000 1
11 19 32.85958 51.27380 18.00000 1
12 20 32.55752 49.94791 18.00000 1
13 21 32.28766 48.85631 18.00000 1
14 24 31.67593 47.09206 18.00000 1
15 25 31.53239 46.91136 18.00000 1
16 28 31.28740 48.01764 18.00000 1
17 32 31.36627 50.55201 18.00000 1
18 35 31.73386 53.19630 18.00000 1
19 36 3 1.91487 54.22624 18.00000 1
20 37 32.13026 55.25721 18.00000 1
21 38 32.38237 56.26713 18.00000 1
22 40 32.98499 58.36229 18.00000 1
23 44 34.59044 62.80187 18.00000 1
24 45 35.06804 64.01951 18.00000 1
25 46 35.57110 65.31888 18.00000 1
26 47 36.09880 66.64696 17.93800 1
27 48 36.72294 67.60053 17.97550 1
28 49 37.39182 68.49995 18.03062 1
29 50 38.10376 69.35728 18.10675 1
30 51 38.85760 70.17693 18.18661 1
31 52 39.65347 70.95875 18.27524 1
32 53 40.49156 71.70261 18.38020 1
33 54 41.35332 72.44006 17.90682 1
34 59 46.37849 74.91802 18.63206 1
35 60 47.53897 75.66218 19.64432 1
36 61 48.74697 76.43933 20.82346 1
37 63 51.30607 78.02426 23.73535 1
38 71 63.43129 86.05467 40.43482 1
39 72 65.15618 87.44794 42.72704 1
40 73 66.92714 88.95324 45.01966 1
41 84 89.42079 114.27939 68.03834 1
42 85 91.73831 117.44007 69.83676 1
43 7 33.69504 54.03695 15.74588 2
44 8 34.99931 53.96500 18.00533 2
45 10 37.61963 54.05684 22.43516 2
46 11 38.93493 54.21969 24.60049 2
47 12 40.25315 54.45963 26.73027 2
48 13 41.57397 54.77581 28.82348 2
49 14 42.89710 55.16727 30.87982 2
50 16 45.54954 56.17193 34.88453 2
51 17 46.87877 56.78325 36.83632 2
52 18 48.21025 57.46656 38.75807 2
53 19 49.54461 58.22266 40.65330 2
54 20 50.88313 59.05509 42.52505 2
55 21 52.22789 59.97318 44.36944 2
56 24 56.24397 63.21832 49.26963 2
57 25 57.55394 64.33850 50.76938 2
58 28 61.45282 68 .05043 54.85522 2
59 32 66.44875 72.85234 60.04517 2
60 35 69.96560 76.06171 63.86949 2
61 36 71.09268 77.06821 65.11714 2
62 37 72.19743 78.04559 66.34927 2
63 38 73.28041 78.99518 67.56565 2
64 40 75.37861 80.81593 69.94129 2
65 44 79.29028 84.20275 74.37780 2
66 45 80.20272 85.00888 75.39656 2
67 46 81.08645 85.80180 76.37110 2
68 47 81.93696 86.57689 77.29704 2
69 48 82.75920 87.34100 78.17739 2
70 49 83.55055 88.09165 79.00945 2
71 50 84.30962 88.82357 79.79567 2
72 51 85.03743 89.53669 80.53817 2
73 52 85.73757 90.23223 81.24291 2
74 53 86.41419 90.91607 81.91232 2
75 54 87.05716 91.58632 82.52800 2
76 59 89.75923 94.58218 84.93629 2
77 60 90.18557 95.05573 85.31541 2
78 61 90.58166 95.51469 85.64864 2
79 63 91.27115 96.31107 86.23124 2
80 71 92.40983 98.35031 86.46934 2
81 72 92.36362 98.52258 86.20465 2
82 73 92.27734 98.67161 85.88308 2
83 84 88.66150 98.84699 78.47602 2
84 85 88.08846 98.73625 77.44067 2

据Gregor说,我试过inherit.aes = FALSE,错误消失。但我的情节看起来像:



< img src =https://i.stack.imgur.com/OvuUQ.pngalt =在这里输入图片描述>

解决方案

我们掌握了所有我们需要的信息。现在我们只需要,嗯,连接点; - )

首先输入数据:

  NVIQ_predict<  -  read.table(text =
id cognisage predict upper lower group
1 7 39.04942 86.68497 18.00000 1
2 8 38.34993 82.29627 18.00000 1
3 10 37.05174 74.31657 18.00000 1
4 11 36.45297 70.72421 18.00000 1
5 12 35.88770 67.39555 18.00000 1
6 13 35.35587 64.32920 18.00000 1
7 14 34.85738 61.52322 18.00000 1
8 16 33.95991 56.68024 18.00000 1
9 17 33.56057 54.63537 18.00000 1
10 18 33.19388 52.83504 18.00000 1
11 19 32.85958 51.27380 18.00000 1
12 20 32.55752 49.94791 18.00000 1
13 21 32.28766 48.85631 18.00000 1
14 24 31.67593 47.09206 18.00000 1
15 25 31.53239 46.91136 18.00000 1
16 28 31.28740 48.01764 18.00000 1
17 32 31.36627 50.55201 18.00000 1
18 35 31.73386 53.19630 18.00000 1
19 36 31.91487 54.22624 18.00000 1
20 37 32.13026 55.25721 18.00000 1
21 38 32.38237 56.26713 18.00000 1
22 40 32.98499 58.36229 18.00000 1
23 44 34.59044 62.80187 18.00000 1
24 45 35.06804 64.01951 18.00000 1
25 46 35.57110 65.31888 18.00000 1
26 47 36.09880 66.64696 17.93800 1
27 48 36.72294 67.60053 17.97550 1
28 49 37.39182 68.49995 18.03062 1
29 50 38.10376 69.35728 18.10675 1
30 51 38.85760 70.17693 18.18661 1
31 52 39.65347 70.95875 18.27524 1
32 53 40.49156 71.70261 18.38020 1
33 54 41.35332 72.44006 17.90682 1
34 59 46.37849 74.91802 18.63206 1
35 60 47.53897 75.66218 19.64432 1
36 61 48.74697 76.43933 20.82346 1
37 63 51.30607 78.02426 23.73535 1
38 71 63.43129 86.05467 40.43482 1
39 72 65.15618 87.44794 42.72704 1
40 73 66.92714 88.95324 45.01966 1
41 84 89.42079 114.27939 68。 03834 1
42 85 91.73831 117.44007 69.83676 1
43 7 33.69504 54.03695 15.74588 2
44 8 34.99931 53.96500 18.00533 2
45 10 37.61963 54.05684 22.43516 2
46 11 38.93493 54.21969 24.60049 2
47 12 40.25315 54.45963 26.73027 2
48 13 41.57397 54.77581 28.82348 2
49 14 42.89710 55.16727 30.87982 2
50 16 45.54954 56.17193 34.88453 2
51 17 46.87877 56.78325 36.83632 2
52 18 48.21025 57.46656 38.75807 2
53 19 49.54461 58.22266 40.65330 2
54 20 50.88313 59.05509 42.52505 2
55 21 52.22789 59.97318 44.36944 2
56 24 56 .24397 63.21832 49.26963 2
57 25 57.55394 64.33850 50.76938 2
58 28 61.45282 68.05043 54.85522 2
59 32 66.44875 72.85234 60.04517 2
60 35 69.96560 76.06171 63.86949 2
61 36 71.09268 77.06821 65.11714 2
62 37 72.19743 78.04559 66.34927 2
63 38 73.28041 78.99518 67.56565 2
64 40 75.37861 80.81593 69.94129 2
65 44 79.29028 84.20275 74.37780 2
66 45 80.20272 85.00888 75.39656 2
67 46 81.08645 85.80180 76.37110 2
68 47 81.93696 86.57689 77.29704 2
69 48 82.75920 87.34100 78.17739 2
70 49 83.55055 88.09165 79.00945 2
71 50 84.30962 88.82357 79.79567 2
72 51 85.03743 89.53669 80.53817 2
73 52 85.73757 90.23223 81.24291 2
74 53 86.41419 90.91607 81.91232 2
75 54 87.05716 91.58632 82.52800 2
76 59 89.75923 94.58218 84.93629 2
77 60 90.18557 95.05573 85.31541 2
78 61 90.58166 95.51469 85.64864 2
79 63 91.27115 96.31107 86.23124 2
80 71 92.40983 98.35031 86.46934 2
81 72 92.36362 98.52258 86.20465 2
82 73 92.27734 98.67161 85.88308 2
83 84 88.66150 98.84699 78.47602 2
84 85 88.08846 98.73625 77.44067 2,header = TRUE)
NVIQ_predict $ id< ; - NULL

确保 group 列是一个因子变量,因此我们可以将它用作线型。 p>

  NVIQ_predict $ group < -  as.factor(NVIQ_predict $ group)


$ b然后建立图形。

  library(ggplot2)

g1 < - ggplot(NVIQ_predict,aes(cogn.age,predict,color = group))+
geom_smooth(aes(x = cogn.age,y = upper,group = group) ,方法=黄土,se = FALSE)+
geom_smooth(aes(x = cogn.age,y = lower,group = group),method =黄土,se = FALSE)+
geom_line linetype = group),size = 0.8)

最后,提取 ,ymin)(x,ymax)组1和组2的曲线坐标。这些对具有相同的x坐标,所以连接这些点模仿了两条曲线之间的区域。这已在中进行了解释。填充两个黄土之间的区域R中的平滑线与ggplot 。这里唯一的区别是我们需要更仔细地选择和连接属于正确的曲线的点...

 gp < -  ggplot_build(g1)

d1 < - gp $ data [[1]]
d2 < - gp $ data [ [2]]

df1 < - data.frame(x = d1 [d1 $ group == 1,] $ x,
ymin = d2 [d2 $ group == 1, ] $ y,
ymax = d1 [d1 $ group == 1,] $ y)

df2 < - data.frame(x = d1 [d1 $ group == 2, ] $ x,
ymin = d2 [d2 $ group == 2,] $ y,
ymax = d1 [d1 $ group == 2,] $ y)

g1 + geom_ribbon(data = df1,aes(x = x,ymin = ymin,ymax = ymax),inherit.aes = FALSE,fill =gray,alpha = 0.4)+
geom_ribbon(data = df2, aes(x = x,ymin = ymin,ymax = ymax),inherit.aes = FALSE,fill =gray,alpha = 0.4)

结果如下所示:

< img src =https://i.stack.imgur.com/wLgOi.pngalt =在这里输入图片描述>


My question is similar to Fill region between two loess-smoothed lines in R with ggplot1

But I have two groups.

g1<-ggplot(NVIQ_predict,aes(cogn.age, predict, color=as.factor(NVIQ_predict$group)))+
    geom_smooth(aes(x = cogn.age, y = upper,group=group),se=F)+
    geom_line(aes(linetype = group), size = 0.8)+
    geom_smooth(aes(x = cogn.age, y = lower,group=group),se=F)

I want to fill red and blue for each group.

I tried:

gg1 <- ggplot_build(g1)   
df2 <- data.frame(x = gg1$data[[1]]$x,
                  ymin = gg1$data[[1]]$y,
                  ymax = gg1$data[[3]]$y)     
g1 + geom_ribbon(data = df2, aes(x = x, ymin = ymin, ymax = ymax),fill = "grey", alpha = 0.4)

But it gave me the error: Aesthetics must either be length one, or the same length as the dataProblems

I get the same error every time my geom_ribbon() data and ggplot() data differ.

Can somebody help me with it? Thank you so much!

My data looks like:

  > NVIQ_predict
   cogn.age  predict     upper    lower group
1         7 39.04942  86.68497 18.00000     1
2         8 38.34993  82.29627 18.00000     1
3        10 37.05174  74.31657 18.00000     1
4        11 36.45297  70.72421 18.00000     1
5        12 35.88770  67.39555 18.00000     1
6        13 35.35587  64.32920 18.00000     1
7        14 34.85738  61.52322 18.00000     1
8        16 33.95991  56.68024 18.00000     1
9        17 33.56057  54.63537 18.00000     1
10       18 33.19388  52.83504 18.00000     1
11       19 32.85958  51.27380 18.00000     1
12       20 32.55752  49.94791 18.00000     1
13       21 32.28766  48.85631 18.00000     1
14       24 31.67593  47.09206 18.00000     1
15       25 31.53239  46.91136 18.00000     1
16       28 31.28740  48.01764 18.00000     1
17       32 31.36627  50.55201 18.00000     1
18       35 31.73386  53.19630 18.00000     1
19       36 31.91487  54.22624 18.00000     1
20       37 32.13026  55.25721 18.00000     1
21       38 32.38237  56.26713 18.00000     1
22       40 32.98499  58.36229 18.00000     1
23       44 34.59044  62.80187 18.00000     1
24       45 35.06804  64.01951 18.00000     1
25       46 35.57110  65.31888 18.00000     1
26       47 36.09880  66.64696 17.93800     1
27       48 36.72294  67.60053 17.97550     1
28       49 37.39182  68.49995 18.03062     1
29       50 38.10376  69.35728 18.10675     1
30       51 38.85760  70.17693 18.18661     1
31       52 39.65347  70.95875 18.27524     1
32       53 40.49156  71.70261 18.38020     1
33       54 41.35332  72.44006 17.90682     1
34       59 46.37849  74.91802 18.63206     1
35       60 47.53897  75.66218 19.64432     1
36       61 48.74697  76.43933 20.82346     1
37       63 51.30607  78.02426 23.73535     1
38       71 63.43129  86.05467 40.43482     1
39       72 65.15618  87.44794 42.72704     1
40       73 66.92714  88.95324 45.01966     1
41       84 89.42079 114.27939 68.03834     1
42       85 91.73831 117.44007 69.83676     1
43        7 33.69504  54.03695 15.74588     2
44        8 34.99931  53.96500 18.00533     2
45       10 37.61963  54.05684 22.43516     2
46       11 38.93493  54.21969 24.60049     2
47       12 40.25315  54.45963 26.73027     2
48       13 41.57397  54.77581 28.82348     2
49       14 42.89710  55.16727 30.87982     2
50       16 45.54954  56.17193 34.88453     2
51       17 46.87877  56.78325 36.83632     2
52       18 48.21025  57.46656 38.75807     2
53       19 49.54461  58.22266 40.65330     2
54       20 50.88313  59.05509 42.52505     2
55       21 52.22789  59.97318 44.36944     2
56       24 56.24397  63.21832 49.26963     2
57       25 57.55394  64.33850 50.76938     2
58       28 61.45282  68.05043 54.85522     2
59       32 66.44875  72.85234 60.04517     2
60       35 69.96560  76.06171 63.86949     2
61       36 71.09268  77.06821 65.11714     2
62       37 72.19743  78.04559 66.34927     2
63       38 73.28041  78.99518 67.56565     2
64       40 75.37861  80.81593 69.94129     2
65       44 79.29028  84.20275 74.37780     2
66       45 80.20272  85.00888 75.39656     2
67       46 81.08645  85.80180 76.37110     2
68       47 81.93696  86.57689 77.29704     2
69       48 82.75920  87.34100 78.17739     2
70       49 83.55055  88.09165 79.00945     2
71       50 84.30962  88.82357 79.79567     2
72       51 85.03743  89.53669 80.53817     2
73       52 85.73757  90.23223 81.24291     2
74       53 86.41419  90.91607 81.91232     2
75       54 87.05716  91.58632 82.52800     2
76       59 89.75923  94.58218 84.93629     2
77       60 90.18557  95.05573 85.31541     2
78       61 90.58166  95.51469 85.64864     2
79       63 91.27115  96.31107 86.23124     2
80       71 92.40983  98.35031 86.46934     2
81       72 92.36362  98.52258 86.20465     2
82       73 92.27734  98.67161 85.88308     2
83       84 88.66150  98.84699 78.47602     2
84       85 88.08846  98.73625 77.44067     2

According to Gregor, I tried inherit.aes = FALSE, the error is gone. But my plot looks like:

解决方案

We've got all the info we need. Now we just need to, ahem, connect the dots ;-)

First the input data:

NVIQ_predict <- read.table(text = "
                id  cogn.age  predict    upper    lower    group
                 1         7 39.04942  86.68497 18.00000     1
                 2         8 38.34993  82.29627 18.00000     1
                 3        10 37.05174  74.31657 18.00000     1
                 4        11 36.45297  70.72421 18.00000     1
                 5        12 35.88770  67.39555 18.00000     1
                 6        13 35.35587  64.32920 18.00000     1
                 7        14 34.85738  61.52322 18.00000     1
                 8        16 33.95991  56.68024 18.00000     1
                 9        17 33.56057  54.63537 18.00000     1
                 10       18 33.19388  52.83504 18.00000     1
                 11       19 32.85958  51.27380 18.00000     1
                 12       20 32.55752  49.94791 18.00000     1
                 13       21 32.28766  48.85631 18.00000     1
                 14       24 31.67593  47.09206 18.00000     1
                 15       25 31.53239  46.91136 18.00000     1
                 16       28 31.28740  48.01764 18.00000     1
                 17       32 31.36627  50.55201 18.00000     1
                 18       35 31.73386  53.19630 18.00000     1
                 19       36 31.91487  54.22624 18.00000     1
                 20       37 32.13026  55.25721 18.00000     1
                 21       38 32.38237  56.26713 18.00000     1
                 22       40 32.98499  58.36229 18.00000     1
                 23       44 34.59044  62.80187 18.00000     1
                 24       45 35.06804  64.01951 18.00000     1
                 25       46 35.57110  65.31888 18.00000     1
                 26       47 36.09880  66.64696 17.93800     1
                 27       48 36.72294  67.60053 17.97550     1
                 28       49 37.39182  68.49995 18.03062     1
                 29       50 38.10376  69.35728 18.10675     1
                 30       51 38.85760  70.17693 18.18661     1
                 31       52 39.65347  70.95875 18.27524     1
                 32       53 40.49156  71.70261 18.38020     1
                 33       54 41.35332  72.44006 17.90682     1
                 34       59 46.37849  74.91802 18.63206     1
                 35       60 47.53897  75.66218 19.64432     1
                 36       61 48.74697  76.43933 20.82346     1
                 37       63 51.30607  78.02426 23.73535     1
                 38       71 63.43129  86.05467 40.43482     1
                 39       72 65.15618  87.44794 42.72704     1
                 40       73 66.92714  88.95324 45.01966     1
                 41       84 89.42079 114.27939 68.03834     1
                 42       85 91.73831 117.44007 69.83676     1
                 43        7 33.69504  54.03695 15.74588     2
                 44        8 34.99931  53.96500 18.00533     2
                 45       10 37.61963  54.05684 22.43516     2
                 46       11 38.93493  54.21969 24.60049     2
                 47       12 40.25315  54.45963 26.73027     2
                 48       13 41.57397  54.77581 28.82348     2
                 49       14 42.89710  55.16727 30.87982     2
                 50       16 45.54954  56.17193 34.88453     2
                 51       17 46.87877  56.78325 36.83632     2
                 52       18 48.21025  57.46656 38.75807     2
                 53       19 49.54461  58.22266 40.65330     2
                 54       20 50.88313  59.05509 42.52505     2
                 55       21 52.22789  59.97318 44.36944     2
                 56       24 56.24397  63.21832 49.26963     2
                 57       25 57.55394  64.33850 50.76938     2
                 58       28 61.45282  68.05043 54.85522     2
                 59       32 66.44875  72.85234 60.04517     2
                 60       35 69.96560  76.06171 63.86949     2
                 61       36 71.09268  77.06821 65.11714     2
                 62       37 72.19743  78.04559 66.34927     2
                 63       38 73.28041  78.99518 67.56565     2
                 64       40 75.37861  80.81593 69.94129     2
                 65       44 79.29028  84.20275 74.37780     2
                 66       45 80.20272  85.00888 75.39656     2
                 67       46 81.08645  85.80180 76.37110     2
                 68       47 81.93696  86.57689 77.29704     2
                 69       48 82.75920  87.34100 78.17739     2
                 70       49 83.55055  88.09165 79.00945     2
                 71       50 84.30962  88.82357 79.79567     2
                 72       51 85.03743  89.53669 80.53817     2
                 73       52 85.73757  90.23223 81.24291     2
                 74       53 86.41419  90.91607 81.91232     2
                 75       54 87.05716  91.58632 82.52800     2
                 76       59 89.75923  94.58218 84.93629     2
                 77       60 90.18557  95.05573 85.31541     2
                 78       61 90.58166  95.51469 85.64864     2
                 79       63 91.27115  96.31107 86.23124     2
                 80       71 92.40983  98.35031 86.46934     2
                 81       72 92.36362  98.52258 86.20465     2
                 82       73 92.27734  98.67161 85.88308     2
                 83       84 88.66150  98.84699 78.47602     2
                 84       85 88.08846  98.73625 77.44067     2", header = TRUE)
NVIQ_predict$id <- NULL

Make sure the group column is a factor variable, so we can use it as a line type.

NVIQ_predict$group <- as.factor(NVIQ_predict$group)

Then build the plot.

library(ggplot2)

g1 <- ggplot(NVIQ_predict, aes(cogn.age, predict, color=group)) + 
             geom_smooth(aes(x = cogn.age, y = upper, group=group), method = loess, se = FALSE) + 
             geom_smooth(aes(x = cogn.age, y = lower, group=group), method = loess, se = FALSE) +
             geom_line(aes(linetype = group), size = 0.8)

Finally, extract the (x,ymin) and (x,ymax) coordinates of the curves for group 1 as well as group 2. These pairs have identical x-coordinates, so connecting those points mimics shading the areas between both curves. This was explained in Fill region between two loess-smoothed lines in R with ggplot. The only difference here is that we need to be a bit more careful to select and connect the points that belong to the correct curves...

gp <- ggplot_build(g1)  

d1 <- gp$data[[1]]
d2 <- gp$data[[2]]

df1 <- data.frame(x    = d1[d1$group == 1,]$x,
                  ymin = d2[d2$group == 1,]$y,
                  ymax = d1[d1$group == 1,]$y)   

df2 <- data.frame(x    = d1[d1$group == 2,]$x,
                  ymin = d2[d2$group == 2,]$y,
                  ymax = d1[d1$group == 2,]$y)   

g1 + geom_ribbon(data = df1, aes(x = x, ymin = ymin, ymax = ymax), inherit.aes = FALSE, fill = "grey", alpha = 0.4) + 
     geom_ribbon(data = df2, aes(x = x, ymin = ymin, ymax = ymax), inherit.aes = FALSE, fill = "grey", alpha = 0.4)

The result looks like this:

这篇关于geom_ribbon错误:美学必须是长度之一的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆