Matplotlib实战之面积图绘制详解

 更新时间:2023年08月17日 10:09:05   作者:databook  
面积图,或称区域图,是一种随有序变量的变化,反映数值变化的统计图表,这篇文章主要介绍了如何利用Matplotlib实现面积图的绘制,需要的可以参考下

面积图,或称区域图,是一种随有序变量的变化,反映数值变化的统计图表。

面积图也可用于多个系列数据的比较。

这时,面积图的外观看上去类似层叠的山脉,在错落有致的外形下表达数据的总量和趋势。

面积图不仅可以清晰地反映出数据的趋势变化,也能够强调不同类别的数据间的差距对比。

面积图的特点在于,折线与自变量坐标轴之间的区域,会由颜色或者纹理填充。

但它的劣势在于,填充会让形状互相遮盖,反而看不清变化。一种解决方法,是使用有透明度的颜色,来“让”出覆盖区域。

1. 主要元素

面积图是一种用于展示数据分布或密度的图表类型,主要由数据点、面积、以及X轴和Y轴组成。
面积图可以直观地反映数据的分布情况。

面积图的主要构成元素包括:

  • 数据点:表示数据的具体位置和大小
  • 面积:表示数据的分布或密度
  • X轴:一般是有序变量,表示数据点的变化区间
  • Y轴:数据点在不同时刻的值

2. 适用的场景

面积图适用于以下分析场景:

  • 数据分布分析:帮助分析人员了解数据的分布情况,如城市的大小、人口分布等。
  • 市场需求分析:帮助企业了解市场需求的变化趋势,如销售额的增长情况等。
  • 健康状况分析:帮助医生了解患者的健康状况,如体温、血压等数据的变化趋势。

3. 不适用的场景

面积图不适用于以下分析场景:

  • 数据的精确性要求较高的分析场景:面积图无法精确地反映数据的分布情况,在需要精确数据的场景中不适用。
  • 需要显示数据细节的分析场景:面积图无法直观地显示数据的细节和变化趋势,在需要显示数据细节的场景中不适用。
  • 需要进行多维数据分析的场景:面积图无法直接展示多维数据,在需要进行多维数据分析的场景中不适用。

4. 分析实战

这次使用国内生产总值相关数据来实战面积图的分析。

4.1. 数据来源

数据来源国家统计局公开数据,已经整理好的csv文件在:databook.top/nation/A02

本次分析使用其中的 A0201.csv 文件(国内生产总值数据)。

下面的文件路径 fp 要换成自己实际的文件路径。

fp = "d:/share/A0201.csv"
df = pd.read_csv(fp)
df

4.2. 数据清理

从中过滤出国内生产总值(亿元)人均国内生产总值(元),然后绘制面积图看看有什么发现。

key1 = "国民总收入(亿元)"
df[df["zbCN"]==key1].head()

key2 = "人均国内生产总值(元)"
df[df["zbCN"]==key2].head()

4.3. 分析结果可视化

**国内生产总值(亿元)**的面积图:

from matplotlib.ticker import MultipleLocator
with plt.style.context("seaborn-v0_8"):
    fig = plt.figure()
    ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
    ax.xaxis.set_major_locator(MultipleLocator(4))
    ax.xaxis.set_minor_locator(MultipleLocator(2))
    data = df[df["zbCN"] == key1].copy()
    data["value"] = data["value"] / 10000
    data = data.sort_values(by="sj")
    ax.fill_between(data["sjCN"], data["value"], label="国民总收入(万亿元)")
    ax.legend(loc="upper left")

上面的代码把Y轴的单位改成了万亿元,原先的亿元作为单位,数值太大。

面积图来展示分析结果,不像折线图那样,仅仅只是变化趋势的感觉;

通过折线下的面积不断扩大,会感觉到国民总收入的总量在不断变大,且2006年之后,总量增速明显提高。

同样分析步骤,人均收入的面积图如下:

from matplotlib.ticker import MultipleLocator
with plt.style.context("seaborn-v0_8"):
    fig = plt.figure()
    ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
    ax.xaxis.set_major_locator(MultipleLocator(4))
    ax.xaxis.set_minor_locator(MultipleLocator(2))
    data = df[df["zbCN"] == key2].copy()
    data = data.sort_values(by="sj")
    ax.fill_between(data["sjCN"], data["value"], label=key2)
    ax.legend(loc="upper left")

接下来,我们把国民总收入人均收入放在一起看,但是,这两组数据的单位不一样(一个是万亿元,一个是元)。

所以要用到之前 matplotlib基础系列中介绍的双坐标轴技巧来展示。

from matplotlib.ticker import MultipleLocator
with plt.style.context("seaborn-v0_8"):
    fig = plt.figure()
    ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
    ax.xaxis.set_major_locator(MultipleLocator(4))
    ax.xaxis.set_minor_locator(MultipleLocator(2))
    ax_twinx = ax.twinx()
    data = df[df["zbCN"] == key1].copy()
    data["value"] = data["value"] / 10000
    data = data.sort_values(by="sj")
    ax.fill_between(data["sjCN"], data["value"], 
                    alpha=0.5, label="国民总收入(万亿元)")
    data = df[df["zbCN"] == key2].copy()
    data = data.sort_values(by="sj")
    ax_twinx.fill_between(data["sjCN"], data["value"], 
                          color='r', alpha=0.2, label=key2)
    ax.legend(loc="upper left")
    ax_twinx.legend(loc="upper right")

两个面积图用了不同颜色,并加了透明度(即alpha 参数),不加透明度,颜色会互相覆盖。

左边的Y轴是国民总收入右边的Y轴是人均收入

这两个面积图几乎完全重合,正说明了国民总收入人均收入是强相关的。

以上就是Matplotlib实战之面积图绘制详解的详细内容,更多关于Matplotlib面积图的资料请关注脚本之家其它相关文章!

相关文章

  • python实现对文件中图片生成带标签的txt文件方法

    python实现对文件中图片生成带标签的txt文件方法

    下面小编就为大家分享一篇python实现对文件中图片生成带标签的txt文件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python实现轻松切割MP3文件

    Python实现轻松切割MP3文件

    有时我们需要将大型MP3文件切割成较小的部分以便上传或发送,所以本文为大家整理了可以轻松切割MP3文件的Python脚本,希望对大家有所帮助
    2023-06-06
  • python 通过可变参数计算n个数的乘积方法

    python 通过可变参数计算n个数的乘积方法

    今天小编就为大家分享一篇python 通过可变参数计算n个数的乘积方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 教你使用Python画圣诞树做浪漫的程序员

    教你使用Python画圣诞树做浪漫的程序员

    这不是圣诞节快到了,还不用Python绘制个圣诞树和烟花让女朋友开心开心,也算是亲手做的,稍稍花了点心思,学会了赶紧画给你的那个她吧
    2022-12-12
  • Python 机器学习工具包SKlearn的安装与使用

    Python 机器学习工具包SKlearn的安装与使用

    Sklearn(全称 SciKit-Learn),是基于 Python 语言的机器学习工具包。本文将简单的介绍SKlearn安装与使用,想要入坑机器学习的同学可以参考下
    2021-05-05
  • Python 邮箱登录验证码功能实现代码

    Python 邮箱登录验证码功能实现代码

    本文介绍了结合前端校验和后端Redis缓存策略实现邮箱登录的功能,旨在提高安全性和效率,前端校验邮箱格式,后端生成并发送验证码,使用Redis缓存验证码以提高效率和安全性,感兴趣的朋友一起看看吧
    2024-12-12
  • 基于Python实现剪贴板历史管理工具

    基于Python实现剪贴板历史管理工具

    在数字化时代,剪贴板是我们日常工作中不可或缺的工具,这篇文章将为大家介绍一下如何使用Python实现一个剪贴板历史管理工具,感兴趣的小伙伴可以了解下
    2025-07-07
  • Python超越函数积分运算以及绘图实现代码

    Python超越函数积分运算以及绘图实现代码

    今天小编就为大家分享一篇Python超越函数积分运算以及绘图实现代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python3打包exe代码2种方法实例解析

    Python3打包exe代码2种方法实例解析

    这篇文章主要介绍了Python3打包exe代码2种方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 树莓派实现移动拍照

    树莓派实现移动拍照

    这篇文章主要为大家详细介绍了树莓派实现移动拍照,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06

最新评论