R 绘图 - 条形图


R 绘图 - 条形图

条形图是一种常用的数据可视化方式,用于比较不同组之间的数据大小差异。R 语言中提供了多种方式来绘制条形图,本文将介绍其中较为常用的两种方法。

基础条形图

基础条形图是一种简单的条形图,适用于只需要展示一个变量的情况。以下是一个示例,展示了不同城市的人口数量:

city <- c("北京", "上海", "广州")
popu <- c(2170, 2424, 1404)

barplot(popu, names.arg = city, xlab = "城市", ylab = "人口数量", main = "城市人口数量")

这个例子中,barplot() 函数接收变量 popu,然后将其转化为一个条形图。其中,names.arg 参数指定了条形的标签,xlabylab 参数分别设置 x、y 轴标签,main 参数设置标题。

需要注意的是,barplot() 函数的输入数据类型可以是向量、矩阵或数据框。如果输入的是向量,则默认生成一个纵向的条形图;如果输入的是矩阵或数据框,则默认生成一个横向的条形图。

以下是一个展示了不同城市不同年份的人口数量的矩阵条形图的示例:

city <- c("北京", "上海", "广州")
popu <- matrix(c(2170, 1000, 1500, 2424, 1300, 1800, 1404, 800, 1200), nrow = 3)
colnames(popu) <- c("2018年", "2019年", "2020年")

barplot(as.matrix(popu), beside = TRUE, col = c("#F8766D", "#00BFC4", "#619CFF"), legend.text = TRUE,
        args.legend = list(title = "年份", x = "topleft"))

legend("topright", colnames(popu), fill = c("#F8766D", "#00BFC4", "#619CFF"))
title("城市人口数量(按年份划分)")

可以看到,在这个例子中,我们将矩阵 popu 转化成了一个条形图。beside 参数指定了将不同年份的条形并排放置,col 参数设置了条形颜色,legend.text 参数设置为 TRUE 则会自动生成图例。

高级条形图

高级条形图可以展示多个变量之间的关系,可以用于展示不同类别的数据在某些特定的维度上的数值属性。以下是一个展示了不同国家不同年份的 GDP 和人口数量的条形图的示例:

library(ggplot2)
library(reshape2)

gdp <- data.frame(country = c("United States", "China", "Japan"), 
                  gdp_2015 = c(18120, 10922, 4368), 
                  gdp_2016 = c(18624, 11232, 4872))
popu <- data.frame(country = c("United States", "China", "Japan"), 
                   popu_2015 = c(321766000, 1376049000, 126910000), 
                   popu_2016 = c(324057000, 1382650000, 126960000))

gdp_melt <- melt(gdp, id.vars = "country", variable.name = "year", value.name = "gdp")
popu_melt <- melt(popu, id.vars = "country", variable.name = "year", value.name = "popu")
data <- merge(gdp_melt, popu_melt)

ggplot(data, aes(x = country, y = gdp, fill = year)) + 
  geom_bar(stat = "identity", position = "dodge") + 
  scale_fill_manual(values = c("#C77CFF", "#7BE141"), name = "年份") + 
  geom_line(aes(y = popu * 50, group = year, color = year), linetype = "dashed") + 
  scale_color_manual(values = c("#A6CEE3", "#1F78B4"), name = "年份") + 
  labs(title = "国家GDP和人口对比", x = "国家", y = "GDP & 人口")

这个例子中,我们用到了 ggplot2 包来绘图。首先,我们将 GDP 和人口数量分别存储在两个数据框中,然后使用 melt() 函数将它们转化为长格式的数据。之后,我们使用 merge() 函数将两个数据框合并。最后,调用 ggplot() 函数和相应的图形语法来绘制图形。

在这个图形中,我们使用 position = "dodge" 参数来使不同年份的 GDP 条形并排放置,并使用颜色来区分不同年份的 GDP。同时,我们使用 geom_line() 函数来画出人口数量的曲线,并使用 color 参数来区分不同年份的人口数量。