使用数字数据在ggplot中制作条形图

时间:2020-04-19 12:01:52

标签: r dataframe ggplot2 geom-bar

我有一个数据框,其中包含美国每个县的各种人口统计和经济数据。成功完成后,我已经汇总了这些数据,可以为我提供每种状态的总计。我在分析中仅使用特定状态,如下所述。 Data Frame

我希望创建一个条形图,以显示每个州的性别划分(每个州有多少男人和女人)。我尝试了以下代码并收到了此输出:

p1 <- ggplot(MW_15, aes(y="2015 Pop", x=State)) + geom_bar(position="fill", stat="identity")
p1 + ylab("Population")

Code Output

是我的数据格式化还是正在使用的代码(很可能是两者的结合)阻止了我获得有意义的结果?

1 个答案:

答案 0 :(得分:1)

首先。如@RuiBarrads所建议的那样,将数据片段放入帖子中时,回答起来会更容易。其次,在aes中使用笨拙的var名称(例如“ 2015 Pop”)时,必须将其放在反引号中,而不要用双引号引起来。否则ggplot2不会将它们视为变量的名称。第三。要按性别绘制人口规模或比例,您必须使用以下方法将df转换为长格式: tidyr::pivot_longer。这样,男性和女性便成为一个变量的类别,我们可以在fill美学上进行映射。试试这个

library(dplyr)
library(tidyr)
library(ggplot2)

p1 <- tidyr::pivot_longer(MW_15, -c("State", "2015 Pop"), names_to = "gender", values_to = "num") %>% 
  ggplot(aes(x=State, y=num, fill = gender)) + 
  geom_bar(position="fill", stat="identity")
p1 + ylab("Population")