我正在 Rstudio Cloud 中处理犯罪数据集。我已经安装了tidyverse。我想将 ggplot2 用于简单的条形图。当我将此脚本用于条形图时...我得到一个条形图
table(Providence$months_names2)
Occurances<-table(Providence$months_names2)
barplot(Occurances)
但是当我尝试在这个脚本中使用 ggplot2 时
x11()
ggplot(data = Providence) +
geom_bar(mapping = aes(Occurances))
我收到以下错误
<块引用>不知道如何为表格类型的对象自动选择比例。默认为连续。
错误:Aesthetics 必须是长度为 1 或与数据相同 (7789):x
大家有什么建议吗?
答案 0 :(得分:0)
假设我们有一个 data.frame,Providence
:
set.seed(123)
Providence <- data.frame(months_names2 = sample(month.abb,500,replace = TRUE),
prov_name = sample(c("NL","PE","NS","NB","QC","ON","MB","SK","AB","BC","YT","NT","NU"),500,replace = TRUE),
type = sample(c("robbery","assault"),500,replace = TRUE))
head(Providence)
# months_names2 prov_name type
#1 Mar PE robbery
#2 Mar SK assault
#3 Oct NB robbery
#4 Feb ON robbery
#5 Jun NU robbery
#6 Nov BC assault
ggplot
函数旨在将图形的一部分映射到数据的列。有一个 data =
参数和一个 mapping =
参数。当你将一列映射到图表的一部分时,它应该存在于数据中。
ggplot
旨在用于 data.frame 数据,而不是表格。
Occurrences<-table(Providence$months_names2)
class(Occurrences)
#[1] "table"
Occurrences
#Apr Aug Dec Feb Jan Jul Jun Mar May Nov Oct Sep
# 41 39 36 35 36 48 43 42 41 39 51 49
您可以看到 x
变量实际上在表的名称中。
names(Occurrences)
[1] "Apr" "Aug" "Dec" "Feb" "Jan" "Jul" "Jun" "Mar" "May" "Nov" "Oct" "Sep"
因此,从技术上讲,如果您将其转换为向量并提取名称,则可以使用该表:
ggplot() +
geom_bar(aes(x = names(Occurrences), y = as.vector(Occurrences)), stat = 'identity')
然而,ggplot
的强大之处在于不必进行所有这些操作,而是直接使用数据。
ggplot(data = Providence, aes(x = months_names2, fill = prov_name)) +
geom_bar()
在这里,stat = "count"
的默认 geom_bar
会为我们处理餐桌业务。