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使用tkinter模块实现文件选择功能

    python使用tkinter模块实现文件选择功能

    这篇文章主要介绍了python使用tkinter模块实现文件选择功能,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • django为Form生成的label标签添加class方式

    django为Form生成的label标签添加class方式

    这篇文章主要介绍了django为Form生成的label标签添加class方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python 字典 setdefault()和get()方法比较详解

    python 字典 setdefault()和get()方法比较详解

    这篇文章主要介绍了python 字典 setdefault()和get()方法比较详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python多线程实现代码(模拟银行服务操作流程)

    python多线程实现代码(模拟银行服务操作流程)

    这篇文章主要介绍了python模拟银行服务多线程实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Python实现生成多种有规律的数字序列

    Python实现生成多种有规律的数字序列

    在 Python 编程中,生成数字序列是一项常见且重要的任务,本文将深入探讨如何使用Python中的内置函数、列表推导式、生成器等方式来生成多种有规律的数字序列,需要的可以参考下
    2024-03-03
  • Python中的Numpy 面向数组编程常见操作

    Python中的Numpy 面向数组编程常见操作

    这篇文章主要介绍了Python中的Numpy 面向数组编程常见操作,使用Numpy数组可以使你利用简单的数组表达式完成多项数据操作任务,而不需要编写大量的循环,这个极大的帮助了我们高效的解决问题
    2022-07-07
  • python 通过可变参数计算n个数的乘积方法

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

    今天小编就为大家分享一篇python 通过可变参数计算n个数的乘积方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python实战之手写一个搜索引擎

    Python实战之手写一个搜索引擎

    这篇文章主要介绍了Python实战之手写一个搜索引擎,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Python实现自动化处理Word文档的方法详解

    Python实现自动化处理Word文档的方法详解

    本文主要介绍了如何使用Python实现Word文档的自动化处理,包括批量生成Word文档、在Word文档中批量进行查找和替换、将Word文档批量转换成PDF等,希望对你有所帮助
    2022-08-08
  • 使用python实现CNN-GRU故障诊断的代码示例

    使用python实现CNN-GRU故障诊断的代码示例

    这篇文章主要给大家详细介绍了如何使用python实现CNN-GRU故障诊断,文章中有详细的代码示例,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07

最新评论