使用数字数据在ggplot中制作条形图
Using numeric data to make a bar graph in ggplot
我有一个数据框,包括美国每个县的各种人口和经济数据。成功后,我总结了这些数据,得到了每个州的总数。我在分析中仅使用特定状态,如下所述。
Data Frame
我想创建一个条形图来显示每个州的性别分布(每个州有多少男性和女性)。我尝试了以下代码并收到了此输出:
p1 <- ggplot(MW_15, aes(y="2015 Pop", x=State)) + geom_bar(position="fill", stat="identity")
p1 + ylab("Population")
Code Output
是我的数据格式还是我正在使用的代码(很可能是两者的结合)阻止了我获得合理的结果?
首先。正如@RuiBarrads 已经建议的那样,当您将数据片段放入 post 时,回答起来会更容易。其次,当在 aes 中使用像“2015 Pop”这样笨拙的 var 名称时,你必须将它们放在反引号而不是双引号中。否则 ggplot2 不会将它们视为变量的名称。第三。要按性别绘制人口规模或份额,您必须使用例如将 df 转换为长格式tidyr::pivot_longer
。通过这种方式,男性和女性成为一个 var 的类别,我们可以将其映射到 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")
我有一个数据框,包括美国每个县的各种人口和经济数据。成功后,我总结了这些数据,得到了每个州的总数。我在分析中仅使用特定状态,如下所述。 Data Frame
我想创建一个条形图来显示每个州的性别分布(每个州有多少男性和女性)。我尝试了以下代码并收到了此输出:
p1 <- ggplot(MW_15, aes(y="2015 Pop", x=State)) + geom_bar(position="fill", stat="identity")
p1 + ylab("Population")
Code Output
是我的数据格式还是我正在使用的代码(很可能是两者的结合)阻止了我获得合理的结果?
首先。正如@RuiBarrads 已经建议的那样,当您将数据片段放入 post 时,回答起来会更容易。其次,当在 aes 中使用像“2015 Pop”这样笨拙的 var 名称时,你必须将它们放在反引号而不是双引号中。否则 ggplot2 不会将它们视为变量的名称。第三。要按性别绘制人口规模或份额,您必须使用例如将 df 转换为长格式tidyr::pivot_longer
。通过这种方式,男性和女性成为一个 var 的类别,我们可以将其映射到 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")