为什么 R barplot 会起作用而 geom_bar 不会?

时间:2021-06-08 17:53:22

标签: r ggplot2

我正在 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

大家有什么建议吗?

1 个答案:

答案 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')

enter image description here

然而,ggplot 的强大之处在于不必进行所有这些操作,而是直接使用数据。

ggplot(data = Providence, aes(x = months_names2, fill = prov_name)) +
   geom_bar()

enter image description here

在这里,stat = "count" 的默认 geom_bar 会为我们处理餐桌业务。

相关问题