堆叠柱状图,是一种用来分解整体、比较各部分的图。
与柱状图类似,堆叠柱状图常被用于比较不同类别的数值。而且,它的每一类数值内部,又被划分为多个子类别,这些子类别一般用不同的颜色来指代。

柱状图帮助我们观察“总量”,堆叠柱状图则可以同时反映“总量”与“结构”。
也就是说,堆叠柱状图不仅可以反映总量是多少?还能反映出它是由哪些部分构成的?
进而,我们还可以探究哪一部分比例最大,以及每一部分的变动情况,等等。

1. 主要元素

堆叠柱状图是常用于比较多个类别或组之间的数据。
它通过将多个柱状图堆叠在一起,展示每个类别或组的总量以及各个部分的相对比例。

它的主要构成元素包括:

  1. 横轴:表示数据的主分类。
  2. 纵轴:每个子分类的比例关系。
  3. 堆叠的矩形:每个柱状图由多个堆叠部分组成,每个堆叠部分表示该类别或组中的一个部分或子类别。
  4. 图例:每个堆叠部分代表的意义。

2. 适用的场景

堆叠柱状图适用于以下的分析场景:

  • 比较多个类别或组的总量以及各个部分的相对比例,例如不同产品的销售总额以及各个渠道的销售额占比。
  • 可视化多个类别或组的趋势变化,例如不同地区的人口数量随时间的变化趋势。
  • 对比多个类别或组之间的差异,例如不同年份的营业额对比。

3. 不适用的场景

堆叠柱状图不适用以下的分析场景:

  • 数据具有负值或包含缺失值的情况。堆叠柱状图只适用于展示正值数据,不适合包含负值或缺失值的数据。
  • 需要比较多个类别的绝对数值大小。堆叠柱状图主要关注各个部分的相对比例,而不是绝对数值大小的比较。

4. 分析实战

本次用堆叠柱状图统计最近几年全国居民消耗的主要几类粮食的情况。

4.1. 数据来源

数据来自国家统计局公开的人民生活数据,可从下面的网址下载:
https://databook.top/nation/A0A

使用的是其中 A0A0A.csv文件(全国居民主要食品消费量)

fp = "d:/share/A0A0A.csv"

df = pd.read_csv(fp)
df

4.2. 数据清理

本次绘制堆叠柱状图,时间上选择最近几年的数据,由于2022年的数据缺失,选择** 2013年~2021年的数据。
内容上每个年度选择
5类**常见的食物:

  1. 居民人均蔬菜及食用菌消费量(千克)
  2. 居民人均肉类消费量(千克)
  3. 居民人均禽类消费量(千克)
  4. 居民人均水产品消费量(千克)
  5. 居民人均蛋类消费量(千克)
#> A0A0A03 居民人均蔬菜及食用菌消费量(千克)
#> A0A0A04 居民人均肉类消费量(千克)
#> A0A0A05 居民人均禽类消费量(千克)
#> A0A0A06 居民人均水产品消费量(千克)
#> A0A0A07 居民人均蛋类消费量(千克)
data = df[(df["sj"] >= 2013) &
(df["sj"] <= 2021) &
(df["zb"].isin(["A0A0A03",
"A0A0A04",
"A0A0A05",
"A0A0A06",
"A0A0A07"]))].copy() data.head(10)

一共45条数据,5个分类,每个分类有9个年度的数据。

4.3. 分析结果可视化

data = data.sort_values("sj")
data[data["zb"] == "A0A0A03"]["value"].tolist() with plt.style.context("seaborn-v0_8"):
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) years = data["sjCN"].drop_duplicates(keep="first").tolist()
bar_data = {
"蔬菜及菌类(千克)": data[data["zb"] == "A0A0A03"]["value"].tolist(),
"肉类(千克)": data[data["zb"] == "A0A0A04"]["value"].tolist(),
"禽类(千克)": data[data["zb"] == "A0A0A05"]["value"].tolist(),
"水产品(千克)": data[data["zb"] == "A0A0A06"]["value"].tolist(),
"蛋类(千克)": data[data["zb"] == "A0A0A07"]["value"].tolist(),
} bottom = np.zeros(len(years))
for key, vals in bar_data.items():
ax.bar(years, vals, label=key, bottom=bottom)
bottom += vals ax.set_title("全国居民主要粮食消耗情况")
ax.legend(loc="upper left", ncol=3)

看图中的分析结果,和事先预想的差不多,蔬菜肉类是我们平时主要的粮食来源。
图中还可以看出,在3年疫情期间,粮食消耗逐步增多,可能是大家认为吃的好才能增强抵抗力 :)

【matplotlib 实战】--堆叠柱状图的更多相关文章

  1. [Python Study Notes]堆叠柱状图绘制

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  2. matplotlib实现三维柱状图

    matplotlib实现三维柱状图 import cv2 img = cv2.imread("1.png", 0) #特征点在图片中的坐标位置 m = 448 n = 392 im ...

  3. echarts 堆叠柱状图 + 渐变柱状图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. echarts堆叠柱状图在最上面的柱子显示总和

    需求 柱子需设置barMinHeight 在堆叠柱状图的最上面显示当前堆叠的总和 直接上代码吧 需要注意:设置barMinHeight时为了让0不显示,只能将0设置为null; 设置为null的柱子l ...

  5. python之 matplotlib模块之绘制堆叠柱状图

    我们先来看一个结果图 看到这个图,我个人的思路是 1 设置标题 import numpy as np import matplotlib.pyplot as plt plt.title('Scores ...

  6. 机器学习-Matplotlib绘图(柱状图,曲线图,点图)

    matplotlib 作为机器学习三大剑客之一   ,比热按时无比强大的 matplotlib是绘图库,所以呢我就分享一下简单的绘图方式 #柱状图 #导报 柱状图 import matplotlib. ...

  7. 使用matplotlib 制图(柱状图、箱型图)

    柱状图: import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('D:\\myfiles\\study\\pyt ...

  8. Python之Matplot——01.堆叠柱状图的绘制

    1.Matplotlib是python的一个绘图库,可以方便的绘制各种图标,是数据可视化的利器. 2.本文我就给大家介绍一下条形图或者说柱状图的绘制 3.代码如下: <1>首先导入模块 1 ...

  9. matplotlib画堆叠条形图

    import matplotlib.pyplot as plt%matplotlib inlineplt.style.use('ggplot') plt.style.use("ggplot& ...

  10. ECharts动态加载堆叠柱状图的实例

    一.引入echarts.js文件(下载页:http://echarts.baidu.com/download.html) 二.HTML代码: <div style="width: 10 ...

随机推荐

  1. expected unqualified-id on oneapi tbb12

    230628-expected unqualified-id eton@230628 在编译supra基于debian12 Qt5.15 tbb12 libtbb12/stable,now 2021. ...

  2. Python Django 模版全解与实战

    本文首先介绍了Django模板系统的基础知识,接着探讨了如何安装和配置Django模板系统,然后深入解析了Django模板的基本结构.标签和过滤器的用法,阐述了如何在模板中展示模型数据,最后使用一个实 ...

  3. HCL实验:4.同一vlan位于不同交换机上的通信

    拓扑图 SW1配置 SW2配置 SW3配置 VLAN 1 PC1 PING PC5 VLAN 2 PC 2 PING PC 6 VLAN 3 PC4 PING PC8 怀疑是模拟器的问题---- 不知 ...

  4. 打开页面就能玩?ZEGO 发布行业首套 Web 端在线 KTV 解决方案

    近些年,在线K歌行业逐渐开始规模化发展,活跃用户不断破新高,据 ZEGO 即构科技研究院数据显示,2021 年中国在线 K 歌用户规模逾 5.2亿,网民渗透率达到 50%. 凭借着极大的便利性和娱乐性 ...

  5. 利用python的PyPDF2和PyMuPDF库玩转PDF的提取、合并、旋转、缩放、加密

    一.安装PyPDF2和PyMuPDF库 pip install PyPDF2 pip install pymupdf # fitz是pymupdf的子模块 二.工具类代码 from PyPDF2 im ...

  6. Argument data type text is invalid for argument 1 of replace function

    今天给webapi添加了搜索,结果数据库显示了这个错误, Argument data type text is invalid for argument 1 of replace function 查 ...

  7. UPS设备在物流机房中的应用浅析

    1 UPS 简介 UPS 即不间断电源 (Uninterruptible Power Supply),是一种含有储能装置的不间断电源.主要用于给部分对电源稳定性要求较高的设备,提供不间断的电源. 当市 ...

  8. 剪切图片, 原文自https://blog.csdn.net/sinat_41104353/article/details/85209456

    因为在 OpenCV2 里面,所有的东西都是 numpy array 即 np.ndarray1,所以使用 opencv 剪切图像主要原理是用 ndarray 的切片.一张图片基本上都是三维数组:行, ...

  9. VScode 中golang 单元测试,解决单元测试超时timeout30s

    目的:单元测试的主要目的是验证代码的每个单元(函数.方法)是否按照预期工作. 提示:解决单元测试超时30s的问题在序号4 1 准备以_test.go结尾文件和导入testing包 在命名文件时需要让文 ...

  10. [ansible]建立ssh互信

    创建密钥 # 创建基于rsa算法的密钥,也可以创建ed25519算法的密钥,性能比rsa高 # 一般直接回车即可 ssh-keygen -t rsa 少量建立互信 如果主机数不多的话,可以手动建立互信 ...