Matplotlib实战之折线图绘制详解

 更新时间:2023年08月16日 10:42:37   作者:databook  
折线图是一种用于可视化数据变化趋势的图表,它可以用于表示任何数值随着时间或类别的变化,本文主要介绍了如何利用Matplotlib实现折线图的绘制,感兴趣的可以了解下

折线图是一种用于可视化数据变化趋势的图表,它可以用于表示任何数值随着时间或类别的变化。

折线图由折线段和折线交点组成,折线段表示数值随时间或类别的变化趋势,折线交点表示数据的转折点。

折线图的方向表示数据的变化方向,即正变化还是负变化,折线的斜率表示数据的变化程度。

1. 主要元素

折线图主要由以下四个元素组成:

  • 数据点:折线图中的每个数据点都代表着一个时间点或一个数值。
  • 折线:折线图中的线条代表着数据的变化趋势。
  • X轴:一般是有序变量,表示数据点的变化区间。
  • Y轴:数据点在不同时刻的值。

2. 适用的场景

折线图适用于以下分析场景:

  • 趋势分析:折线图可以用于展示数据的增长、下降、波动等趋势,帮助分析人员了解数据的变化趋势。
  • 问题诊断:折线图可以用于数据异常检测,帮助分析人员快速发现数据的异常情况。

3. 不适用的场景

折线图不适用于以下分析场景:

  • 数据分类和分组:折线图不适用于数据分类和分组分析,因为折线图主要用于展示数据的变化趋势,而不是数据的分类和分组情况。
  • 数据回归分析:折线图不适用于数据回归分析,因为回归分析需要建立在数据样本中的线性关系,而折线图主要用于展示数据的变化趋势,不能很好地反映数据的线性关系。

4. 分析实战

4.1. 数据来源

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

本次分析使用其中的 A0301.csv 文件(总人口数据)。

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

import pandas as pd
fp = "d:/share/A0301.csv"
df = pd.read_csv(fp)
df

4.2. 数据清理

首先看看 zbCN 字段中有多少种不同的人口统计类别。

df.groupby(by="zbCN").count()

这个数据集中一共有5种不同维度的人口统计:

  • 年末总人口
  • 男性人口
  • 女性人口
  • 城镇人口
  • 乡村人口

按照类别,将它们分离成5个不同的数据集,为了绘制折线图做准备。

groups = df.groupby(by="zbCN")
dict_group = {}
for g in groups:
    dict_group[g[0]] = g[1]
for k, v in dict_group.items():
    print("key = {}, value type = {}".format(k, type(v)))

groupby 函数按照 by 参数指定的字段将数据集分组,每个group是一个二元的元组。

第一个元素是用来分组的字段值,第二个元素是分组之后的数据集。

4.3. 分析结果可视化

拆分好数据集之后,最就是可视化展示。

首先封装一个函数,用来显示2个数据:(直接使用上面分割好的数据集dict_group

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
%matplotlib inline
#为了显示中文
matplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]
matplotlib.rcParams["axes.unicode_minus"] = False
#根据key显示两个数据集
def draw(key1, key2):
    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 = dict_group[key1]
        ax.plot(data["sjCN"], data["value"], "b--o", label=key1)
        data = dict_group[key2]
        ax.plot(data["sjCN"], data["value"], "g:d", label=key2)
        ax.legend()

首先看下男女人口的变化趋势:

key1 = "女性人口(万人)"
key2 = "男性人口(万人)"
#男性人口和女性人口的变化趋势
dict_group[key1] = dict_group[key1].sort_values("sj")
dict_group[key2] = dict_group[key2].sort_values("sj")
draw(key1, key2)

看这个趋势变化,男女人口的差距长期都在几千万上下,所以找不到女朋友也许不是你的责任 : )

再看看城镇和乡村的人口变化。

key1 = "乡村人口(万人)"
key2 = "城镇人口(万人)"
#乡村人口和城镇人口的变化趋势
dict_group[key1] = dict_group[key1].sort_values("sj")
dict_group[key2] = dict_group[key2].sort_values("sj")
draw(key1, key2)

从图中可以看出,1994年左右,乡村人口开始进入城镇;

2010年左右,城镇人口开始超越乡村人口,且人口差距越来越大。

折线图最适合的场景就是展示这类有趋势变化的数据。

到此这篇关于Matplotlib实战之折线图绘制详解的文章就介绍到这了,更多相关Matplotlib折线图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现斐波那契数列的多种写法总结

    Python实现斐波那契数列的多种写法总结

    这篇文章主要给大家介绍了利用Python实现斐波那契数列的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2022-07-07
  • python基于C/S模式实现聊天室功能

    python基于C/S模式实现聊天室功能

    这篇文章主要为大家详细介绍了python基于C/S模式实现聊天室功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • python从gbff文件中直接提取cds序列

    python从gbff文件中直接提取cds序列

    这篇文章主要为大家介绍了python从gbff文件中直接提取cds序列示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • python各层级目录下import方法代码实例

    python各层级目录下import方法代码实例

    这篇文章主要介绍了python各层级目录下import方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python绘制直线的方法

    python绘制直线的方法

    这篇文章主要为大家详细介绍了python绘制直线的方法,绘制直线通用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • python pycharm最新版本激活码(永久有效)附python安装教程

    python pycharm最新版本激活码(永久有效)附python安装教程

    PyCharm是一个多功能的集成开发环境,只需要在pycharm中创建python file就运行python,并且pycharm内置完备的功能,这篇文章给大家介绍python pycharm激活码最新版,需要的朋友跟随小编一起看看吧
    2020-01-01
  • python字符串分割及字符串的一些常规方法

    python字符串分割及字符串的一些常规方法

    这篇文章主要介绍了python字符串分割以及字符串的一些常规方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • VS2022+Python3.11实现C++调用python接口

    VS2022+Python3.11实现C++调用python接口

    在C/C++中嵌入Python,可以使用Python提供的强大功能,通过嵌入Python可以替代动态链接库形式的接口,本文主要介绍了VS2022+Python3.11实现C++调用python接口,感兴趣的可以了解一下
    2023-12-12
  • Python判断一个数是否为质数的3种方法(超详细)

    Python判断一个数是否为质数的3种方法(超详细)

    一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除(2, 3, 5, 7等),换句话说就是该数除了1和它本身以外不再有其他的因数,下面这篇文章主要给大家介绍了关于利用Python判断一个数是否为质数的3种方法,需要的朋友可以参考下
    2024-09-09
  • 详解Python中使用base64模块来处理base64编码的方法

    详解Python中使用base64模块来处理base64编码的方法

    8bit的bytecode经常会被用base64编码格式保存,Python中自带base64模块对base64提供支持,这里我们就来详解Python中使用base64模块来处理base64编码的方法,需要的朋友可以参考下
    2016-07-07

最新评论