我两天前开始学习使用R,所以这可能是一个非常简单的修复方法!
我首先制作了一个非常简单的表格,显示了我的数据中“g”和“t”的百分比年龄(我从事的是社会语言学)。
---g--- | ---t---
0.936871 | 0.063129
我正在尝试使用ggplot2将其转换为条形图。我希望x轴有两个类别,一个条形代表“g”,一个代表“t”,并排而不是堆叠。我希望y轴显示2%的年龄。
我已经尝试了各种不同的脚本,但我一直收到错误消息‘美学必须长度为1或与数据中的长度相同’。此错误消息是什么意思?我如何修复它?
谢谢!赛迪
发布于 2016-11-25 18:14:25
你得到这个错误是因为你的数据集格式不正确。对于您的数据,您有一个t
变量和一个g
变量。ggplot
希望接收描述该轴/特征的所有元素的AES值。
您拥有的数据是宽格式的(多列)。ggplot2
更好地利用了长格式数据(键-值对)。要将宽数据转换为长数据,可以使用tidyr
包(特别是gather
函数)将值收集到一列变量和一列值中。在你的例子中,变量是g和t,值是你的百分比。
然后将转换后的数据传递给ggplot
,将x轴指定为变量,y轴指定为百分比。您希望使用geom_bar()
设置stat = "identity"
将其绘制为条形图,因为您提供了这些值。最后一步是通过scale_y_continuous
将y轴上的标签设置为percent。
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)
结果如下所示:
关于你的评论请求:
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"))
https://stackoverflow.com/questions/40808957
复制相似问题