可视化 - 柱状图:matplotlib vs. ggplot2

本文为可视化系列第 02 篇,将介绍柱状图的基础概念、适用场景与数据集选取,并分别使用 Python Matplotlib 和 R ggplot2 两套工具,演示绘制同一幅柱状图。
柱状图
柱状图,也叫条形图,是最常用的数据可视化图表之一,用矩形柱子的高度(垂直柱状图)或长度(水平柱状图)代表数值大小,用来对比不同类别数据。
适用场景:
- 不同类别数据大小对比 -> 单系列柱状图
- 同一维度下多组数据并列对比 -> 分组柱状图
- 看总量及内部组成占比 -> 堆叠柱状图
单系列柱状图
单系列柱状图是柱状图最基础的形式,只包含一组数据,它借助柱子的高度来对比多个独立类别对应的数值,能够直观展现同一个指标在不同分类下的大小差异。
Python Matplotlib
| |
plt.bar()方法绘制柱状图,width参数设置柱子宽度,color参数设置柱子颜色;plt.text()方法在柱子上添加数值标签:rotation参数设置标签旋转角度;ha参数设置标签水平对齐方式;va参数设置标签垂直对齐方式;fontsize参数设置标签字体大小;
plt.ylim()方法设置 y 轴范围,确保所有数值都能被显示出来。

R ggplot2
| |

reorder()方法将类别按数值大小排序,确保柱子按数值大小排序,-gdp表示按 GDP 从大到小排序;geom_text()的nudge_y参数设置标签垂直偏移量,确保标签与柱子不重叠;
分组柱状图
分组柱状图属于柱状图的一种,在同一个分类下并列放置多根柱子。它可以同时对比两组及以上系列的数据,直观展现不同组别之间的差异。该图表适合分析同一类别下多个指标的横向对比关系。
Python Matplotlib
| |
plt.bar()方法绘制柱状图,第 1 个参数用于设置分组内柱子的位置;plt.text()方法绘制柱子上的数值文本;

R ggplot2
| |
df_long <- data.frame(...)每个城市重复 3 行;industry 设为因子并固定层级,决定堆叠/图例顺序;totals <- data.frame(...)各城市总增加值,用于柱顶标签;ord <- order(totals$total, decreasing = TRUE)按总增加值降序重排 city 因子层级,使 x 轴从左到右由大到小;geom_col(...)中的position = position_dodge(0.9)使柱子并列且彼此贴合。

堆叠柱状图
堆叠柱状图是柱状图的一种,它将同一分类下不同系列的数据依次叠放在一根柱子上。柱子总高度代表该分类下的总量,各分段的高度则对应各个组成部分的数值。它适合同时观察整体总量和内部各部分的构成情况。
Python Matplotlib
| |
plt.bar()方法绘制柱状图,bottom参数设置柱子底部位置,label参数设置柱子标签,color参数设置柱子颜色;plt.text()方法在柱子上添加数值标签;plt.tight_layout()方法调整子图参数,确保子图之间有足够的空间。

R ggplot2
| |
df_long <- data.frame(...)每个城市重复 3 行;industry 设为因子并固定层级,决定堆叠/图例顺序;totals <- data.frame(...)各城市总增加值,用于柱顶标签;ord <- order(totals$total, decreasing = TRUE)按总增加值降序重排 city 因子层级,使 x 轴从左到右由大到小;geom_col(width = 0.6, position = position_stack(reverse = TRUE))绘制堆叠柱状图,width参数设置柱子宽度,position参数设置柱子位置,reverse参数设置是否反转堆叠顺序。
