首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggplot2 (R):Error msg:‘错误:美学必须长度为1或与数据相同(1093):x,y’

ggplot2 (R):Error msg:‘错误:美学必须长度为1或与数据相同(1093):x,y’
EN

Stack Overflow用户
提问于 2016-11-26 00:13:06
回答 1查看 2.2K关注 0票数 0

我两天前开始学习使用R,所以这可能是一个非常简单的修复方法!

我首先制作了一个非常简单的表格,显示了我的数据中“g”和“t”的百分比年龄(我从事的是社会语言学)。

代码语言:javascript
复制
    ---g---  | ---t--- 
    0.936871 | 0.063129 

我正在尝试使用ggplot2将其转换为条形图。我希望x轴有两个类别,一个条形代表“g”,一个代表“t”,并排而不是堆叠。我希望y轴显示2%的年龄。

我已经尝试了各种不同的脚本,但我一直收到错误消息‘美学必须长度为1或与数据中的长度相同’。此错误消息是什么意思?我如何修复它?

谢谢!赛迪

EN

回答 1

Stack Overflow用户

发布于 2016-11-26 02:14:25

你得到这个错误是因为你的数据集格式不正确。对于您的数据,您有一个t变量和一个g变量。ggplot希望接收描述该轴/特征的所有元素的AES值。

您拥有的数据是宽格式的(多列)。ggplot2更好地利用了长格式数据(键-值对)。要将宽数据转换为长数据,可以使用tidyr包(特别是gather函数)将值收集到一列变量和一列值中。在你的例子中,变量是g和t,值是你的百分比。

然后将转换后的数据传递给ggplot,将x轴指定为变量,y轴指定为百分比。您希望使用geom_bar()设置stat = "identity"将其绘制为条形图,因为您提供了这些值。最后一步是通过scale_y_continuous将y轴上的标签设置为percent。

代码语言:javascript
复制
library(tidyr)
library(ggplot2)
library(scales)

df <- data.frame(g = 0.936871,
                 t = 0.063129)

df <- gather(df, variable, value)

ggplot(df, aes(x = variable, y = value)) +
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = percent)

结果如下所示:

关于你的评论请求:

代码语言:javascript
复制
df <- data.frame(
  category = c(1, 2),
  g = c(0.8070175, 0.97099768),
  t = c(0.1929825, 0.029000232)
)

df <- gather(df, variable, value, -category)

ggplot(df, aes(x = category, y = value)) +
  geom_col(aes(fill = variable), position = position_dodge()) +
  scale_y_continuous(labels = percent) +
  scale_x_discrete(limits = c(1,2), breaks = c(1,2), labels = c("Category 1", "Category 2"))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40808957

复制
相关文章

相似问题

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