我有一个数据框,其中包含美国每个县的各种人口统计和经济数据。成功完成后,我已经汇总了这些数据,可以为我提供每种状态的总计。我在分析中仅使用特定状态,如下所述。 Data Frame
我希望创建一个条形图,以显示每个州的性别划分(每个州有多少男人和女人)。我尝试了以下代码并收到了此输出:
p1 <- ggplot(MW_15, aes(y="2015 Pop", x=State)) + geom_bar(position="fill", stat="identity")
p1 + ylab("Population")
是我的数据格式化还是正在使用的代码(很可能是两者的结合)阻止了我获得有意义的结果?
答案 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")