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操作数据库之数据库编程接口

    Python操作数据库之数据库编程接口

    这篇文章主要介绍了Python操作数据库之数据库编程接口,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-06-06
  • 在Heroku云平台上部署Python的Django框架的教程

    在Heroku云平台上部署Python的Django框架的教程

    这篇文章主要介绍了在Heroku云平台上部署Python的Django框架的教程,Heroku云平台使用了Git版本控制系统,所以本教程主要提供了配置所需要的Git脚本,需要的朋友可以参考下
    2015-04-04
  • Python 如何访问外围作用域中的变量

    Python 如何访问外围作用域中的变量

    这篇文章主要介绍了Python 如何访问外围作用域中的变量的相关资料,需要的朋友可以参考下
    2016-09-09
  • IPython 8.0 Python 命令行交互工具

    IPython 8.0 Python 命令行交互工具

    这篇文章主要介绍了IPython 8.0 Python 命令行交互工具,IPython 是 Python 的原生交互式 shell 的增强版,可以完成许多不同寻常的任务,下面我们就拉看看文章具体的介绍内容吧
    2022-01-01
  • python学习--使用QQ邮箱发送邮件代码实例

    python学习--使用QQ邮箱发送邮件代码实例

    这篇文章主要介绍了python使用QQ邮箱发送邮件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python批量自动修改文件名,按指定的格式自动命名方式

    Python批量自动修改文件名,按指定的格式自动命名方式

    这篇文章主要介绍了Python批量自动修改文件名,按指定的格式自动命名方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • python使用numpy寻找二维数组的最值及其下标方法分析

    python使用numpy寻找二维数组的最值及其下标方法分析

    这篇文章主要为大家介绍了python使用numpy寻找二维数组的最值及其下标实现方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 详解python中的index函数用法

    详解python中的index函数用法

    这篇文章主要介绍了详解python中的index函数用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • python点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)

    python点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)

    这篇文章主要介绍了python点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库),了解膨胀/腐蚀这两个基础操作,可以通过对其进行简单组合来形成开/闭操作,需要的朋友可以参考下
    2021-08-08
  • Python和Pygame库开发“小黄狗跑酷”游戏

    Python和Pygame库开发“小黄狗跑酷”游戏

    “小黄狗跑酷”是一款有趣的跑酷类游戏,玩家将控制一只可爱的小黄狗在城市的街道上跑酷,避开障碍物,收集骨头,尽可能获得高分,本文将全面介绍如何使用Python和Pygame库来开发这个游戏,从最初的概念设计到最终的代码实现,帮助您理解游戏开发的基本流程
    2025-03-03

最新评论