条形图
条形图(Bar Chart)是一种常用于展示数据分布和比较不同类别之间关系的图表类型。它通过水平或垂直的长方形条形来表示数据,每个条形的长度(或高度)与相应类别的数值大小相关。以下是条形图的一些关键特征和使用方法:
组成要素:
-
条形(Bar): 每个数据类别对应一个条形,其长度(或高度)表示该类别的数值大小。
-
轴(Axis): 条形图通常有两个轴,一个用于表示数据的类别(通常是横轴),另一个用于表示数值大小(通常是纵轴)。
-
类别(Category): 数据被分为不同的类别,每个类别对应一个条形。类别可以是任何可以进行比较的项目,例如时间、地区、产品等。
-
数值刻度(Scale): 轴上的刻度表示数值的大小,有助于读取和理解每个条形的数值。
类型:
-
垂直条形图(Vertical Bar Chart): 条形是垂直排列的,通常横轴表示类别,纵轴表示数值大小。
-
水平条形图(Horizontal Bar Chart): 条形是水平排列的,通常横轴表示数值大小,纵轴表示类别。
用途:
-
比较数据: 条形图是一种直观的比较工具,可以清晰地比较不同类别之间的数值大小。
-
显示趋势: 通过排列在轴上的顺序,可以突出数据的趋势和相对大小。
-
分布情况: 条形图也可以用于显示数据的分布情况,特别是在分组数据的情境中。
-
突出异常值: 当数据中存在异常值或者某些类别与其他类别有明显差异时,条形图可以帮助突出这些差异。
制作步骤:
-
选择数据: 选择需要比较或展示的数据集。
-
确定类别: 确定数据的类别,每个类别对应一个条形。
-
绘制条形图: 使用图表制作工具(如Excel、matplotlib等)绘制条形图,将数据映射到相应的条形上。
-
添加标签和标题: 为图表添加轴标签、数据标签和标题,以增加可读性。
-
解释图表: 解释条形图,突出关键趋势、比较结果或分析数据分布。
示例代码
library(tidyverse)
data("mtcars") #R语言自带数据集
mtcars_tbl <- rownames_to_column(mtcars, var = 'car') %>%
mutate(cyl = factor(cyl)) # 转换为因子
head(mtcars_tbl)
![](https://img.haomeiwen.com/i27313279/930e4498eefce60e.png)
- 我们用条形图来展示每辆车的油耗,以车名为X轴以油耗为Y轴。
library(ggsci)
ggplot(mtcars_tbl, aes(x = car, y = mpg)) +
geom_bar(stat = 'identity',
aes(fill = cyl),
width = 0.5) +
scale_fill_npg() +
labs(fill = 'cyl') +
theme_classic() +
theme(axis.title.x = element_blank(),
axis.text.x = element_text(angle = 45,
hjust = 0.5,
vjust = 0.5),
legend.position = 'top')
![](https://img.haomeiwen.com/i27313279/622dc5d160b440a2.png)
- 按照油耗的高低进行排序,所以需要修改因子的顺序。
# 油耗降序排列
mtcars_tbl <- arrange(mtcars_tbl, desc(mpg))
# 设置 car 的因子顺序为表中顺序
mtcars_tbl <- mutate(mtcars_tbl, car = factor(car, levels = car))
ggplot(mtcars_tbl, aes(x = car, y = mpg)) +
geom_col(aes(fill = factor(cyl)),
width = 0.5) +
scale_fill_npg() +
labs(fill = 'cyl') +
theme_classic() +
theme(axis.title.x = element_blank(),
axis.text.x = element_text(angle = 45,
hjust = 0.5,
vjust = 0.5),
legend.position = 'top'),
legend.direction = "horizontal")
![](https://img.haomeiwen.com/i27313279/a27117f64c4de072.png)
- 按照分组排序,将相同的cyl放在一起,需要先对car的因子排序
# mpg 降序排列
mtcars_tbl <- arrange(mtcars_tbl, cyl, mpg)
# 设置 car 的因子顺序为表中顺序
mtcars_tbl <- mutate(mtcars_tbl, car = factor(car, levels = car))
# 画图的代码不需要任何修改
ggplot(mtcars_tbl, aes(x = car, y = mpg)) +
geom_col(aes(fill = factor(cyl)),
width = 0.5) +
scale_fill_npg() +
labs(fill = 'cyl') +
theme_classic() +
theme(axis.title.x = element_blank(),
axis.text.x = element_text(angle = 45,
hjust = 0.5,
vjust = 0.5),
legend.position = ('top'),
legend.direction = "horizontal")
![](https://img.haomeiwen.com/i27313279/4c95b4a170e8e4ee.png)
- 还可以计算油耗的z-score
mtcars_tbl$mpg_z <-
(mtcars_tbl$mpg -mean(mtcars_tbl$mpg))/sd(mtcars_tbl$mpg)
mtcars_tbl$mpg_grp <- factor(ifelse(mtcars_tbl$mpg_z > 0,
"hight", "low"),
levels = c("hight", "low"))
mtcars_tbl$car <- fct_reorder(mtcars_tbl$car,
mtcars_tbl$mpg_z)
ggplot(mtcars_tbl, aes(x = car, y = mpg_z)) +
geom_bar(stat = 'identity',
aes(fill = mpg_grp),
width = 0.5) +
scale_fill_npg() +
labs(y = 'mpg z-score', fill = 'cyl') +
theme_classic() +
theme(axis.title.x = element_blank(),
axis.text.x = element_text(angle = 45,
hjust = 0.5,
vjust = 0.5),
legend.position = ('top'),
legend.direction = "horizontal")
![](https://img.haomeiwen.com/i27313279/028739ebd8459316.png)
- 翻转坐标轴
ggplot(mtcars_tbl, aes(x = car, y = mpg_z)) +
geom_bar(stat = 'identity', aes(fill = mpg_grp), width = 0.5) +
scale_fill_npg() +
labs(x = '', y = 'mpg z-score', fill = 'cyl') +
theme_minimal() +
theme(axis.title.x = element_blank(),
axis.text.x = element_text(angle = 45,
hjust = 0.5,
vjust = 0.5)) +
coord_flip()
![](https://img.haomeiwen.com/i27313279/f1da35fdfe93cb52.png)
网友评论