首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:美学必须是长度1或与数据(10):x,y,group相同

错误:美学必须是长度1或与数据(10):x,y,group相同
EN

Stack Overflow用户
提问于 2017-06-07 04:12:27
回答 2查看 8.3K关注 0票数 1

我有一个小的数据集,我想用一个线状图来绘制它:

代码语言:javascript
复制
 > Gain
     quantile Positives Total_Examples Positive_Prevalence     Lift Cumsum_Positives
 1:     (0, ]         1              1                   1 1.428571        0.1428571
 2: (1.9,2.8]         1              1                   1 1.428571        0.2857143
 3: (2.8,3.7]         1              1                   1 1.428571        0.4285714
 4: (3.7,4.6]         1              1                   1 1.428571        0.5714286
 5: (4.6,5.5]         1              1                   1 1.428571        0.7142857
 6: (5.5,6.4]         1              1                   1 1.428571        0.8571429
 7: (6.4,7.3]         1              1                   1 1.428571        1.0000000
 8: (7.3,8.2]         0              1                   0 0.000000        1.0000000
 9: (8.2,9.1]         0              1                   0 0.000000        1.0000000
10:  (9.1,10]         0              1                   0 0.000000        1.0000000

我的代码如下:

代码语言:javascript
复制
    ggplot(Gain ) +
  geom_area(aes(x = quantile, y = Cumsum_Positives, group = 1), color = "red", fill = "red", alpha = 0.5, size = 2) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  geom_line(aes(x = quantile, y = seq(0, 1 , by = 0.1)  , group = 1), color = "blue", size = 2, alpha = 0.5) +
  scale_x_discrete(name ="% of the Data Set",
                   labels=c("0%", "10%","20%","30%", "40%", "50%", "60%","70%","80%", "90%", "100%"))

但是,我收到一条错误消息:

代码语言:javascript
复制
  Error: Aesthetics must be either length 1 or the same as the data (10): x, y, group

我读过与这类错误相关的文章,通常错误意味着美学中调用的变量在原始数据中不存在。但这里的情况并非如此。

我也尝试过这段代码,但它也返回相同的错误消息:

代码语言:javascript
复制
Gain$index <- row.names(Gain)


ggplot(Gain ) +
  geom_area(aes(x = index, y = Cumsum_Positives, group = 1), color = "red", fill = "red", alpha = 0.5, size = 2) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  geom_line(aes(x = quantile, y = seq(0, 1 , by = 0.1)  , group = 1), color = "blue", size = 2, alpha = 0.5) +
  scale_x_discrete(name ="% of the Data Set",
                   labels=c("0%", "10%","20%","30%", "40%", "50%", "60%","70%","80%", "90%", "100%"))

您的建议将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-07 04:20:03

您的数据长度为10,而geom_line中的y美学长度为11。

代码语言:javascript
复制
seq(0, 1 , by = 0.1)
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

试试seq(0,0.9,by=0.1)seq(0.1,1,by=0.1)

票数 2
EN

Stack Overflow用户

发布于 2017-06-07 07:26:31

如果您的目标是从(x = 0,y= 0)到(x = 0.9,y= 1)之间画一条线,那么您也可以用geom_line替换geom_abline

代码语言:javascript
复制
geom_abline(slope = 1/9,
            intercept = -0.109,
            color = "blue",
            size = 2,
            alpha = 0.5) +
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44403362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档