type
status
date
slug
summary
tags
category
icon
password
📝 主旨内容
1.曲线图
作为绘图程序的Hello World,我们将首先绘制一条简单的曲线。同时还将简单介绍matplotlib的工作原理。
1.1 曲线图的绘制

图1-1
由于 matplotlib 它只专注于绘图,因此如果想从文件中读取输入或进行一些中间计算,那么必须使用 Python 模块,
但不用担心, matplotlib 与其他模块具有良好的兼容性,并不涉及过多的技巧。
例如,要生成大量统计图形,可能需要使用科学计算包,如 Numpy 和 Python 的文件读取I/O模块。在接下来的讲解中会给出相应的示例。

1.2 结合Numpy库,绘制曲线图


1.3 绘制多曲线图
很多时候我们需要对比多组数据,以发现数据间的异同,此时就需要在一张图片上绘制多条曲线——多曲线图,
下图展示了在同一图片中绘制函数 y=x、y=x^2、y=loge(x) 以及 y=sin(x) :
Tips: 一条曲线的绘制需要调用一次 plt.plot(), 而 plt.show() 只需调用一次。
这种延迟呈现机制是 matplotlib 的核心,我们可以声明在任何时间绘制图形,但只有在调用 plt.show() 时才会渲染显示图形。
为了更好的说明这种延迟呈现机制,编写以下代码:
可以看到,尽管其中一个 plt.plot() 是在 plot_func 函数中调用的,它对图形的呈现没有任何影响,
因为 plt.plot() 只是声明了我们要呈现的内容,但还没有执行渲染。
因此可以使用此特性结合 for 循环、条件判断等语法完成复杂图形的绘制,同时也可以在同一张图中组合不同类型的统计图。


1.4 读取数据文件绘制曲线图
很多情况下数据都是存储于文件中,因此,我们需要首先读取文件中的数据,再进行绘制。
说明起见,以 .txt 文件为例,其他诸如 Excel、CSV 文件可以使用 pandas、numpy 等库进行读取。
假设存在 data.txt 文件如下:
0 1
1 2
2 5
4 17
5 26
6 37
读取数据和绘制的代码如下:

2.散点图
当绘制曲线图时,我们假设点与点之间存在序列关系。
而散点图是简单地绘制点,它们之间并不存在连接。

3.条形图
条形图具有丰富的表现形式,常见的类型包括单组条形图,多组条形图,堆积条形图和对称条形图等。
3.1 单组条形图
条形图的每种表现形式都可以绘制成垂直条形图或水平条形图,
以单组条形图的两种绘制方式为例:



3.2 多组条形图
当需要比较不同年份相应季度的销量等此类需求时,我们可能需要多组条形图。

3.3 堆积条形图
通过使用 plt.bar() 函数中的可选参数,可以绘制堆积条形图。


3.4 对称条形图
一个简单且有用的技巧是对称绘制两个条形图。
例如想要绘制不同年龄段的男性与女性数量的对比:
图中女性人口的条形图照常绘制。然而,男性人口的条形图的条形向左延伸,而不是向右延伸。
可以使用数据的负值来快速实现对称条形图的绘制。

4.饼图
饼图可以用于对比数量间的相对关系:
Tips: plt.pie() 函数将一系列值作为输入,将值传递给 matplolib,
它就会自动计算各个值在饼图中的相对面积,并进行绘制。

5.直方图
直方图是概率分布的图形表示。事实上,直方图只是一种特殊的条形图。
我们可以很容易地使用 matplotlib 的条形图函数,并进行一些统计运算来生成直方图。
但是,直方图非常有用,因此 matplotlib 提供了一个更加方便的函数:
Tips: plt.hist() 函数的作用是:获取一系列值作为输入。值的范围将被划分为大小相等的范围(默认情况下数量为10),
然后生成条形图,一个范围对应一个条柱,一个条柱的高度是相应范围内中的值的数量,条柱的数量由可选参数 bins 确定。

6.箱形图
箱形图可以通过方便地显示一组值的中位数、四分位数、最大值和最小值来比较值的分布。
Tips: plt.boxplot() 函数的作用是:获取一组值,并自动计算平均值、中位数和其他统计量。

箱形图描述:
图中黄线是分布的中位数。
方形箱框包括从下四分位数Q1 到上四分位数Q3 的 50% 的数据。
下盒须的下四分位延伸到 1.5(Q3-Q1)。
上盒须从上四分位延伸至 1.5(Q3-Q1)。
离盒须较远的数值用圆圈标记。
要在单个图形中绘制多个箱形图,对每个箱形图调用一次 plt.boxplot() 是不可行。
它会将所有箱形图画在一起,形成一个混乱的、不可读的图形。
如果想要到达符合要求的效果,只需在一次调用 plt.boxplot() 中,同时绘制多个箱形图即可,如下所示:

7.三角网格图
处理空间位置时会出现网格图。除了显示点之间的距离和邻域关系外,三角网格图也是表示地图的一种方便方法。
Tips: 代码中导入了 matplotlib.tri 模块,该模块提供了从点计算三角网格的辅助函数。

🤗 总结归纳
本文主要介绍常见统计图的绘制,相关测试代码已经配套提供,读者可以自己进行测试。
📎 参考文章
有关 Python-Matplotlib 安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- Author:Naipings
- URL:https://naipings.cn/article/python/matplotlib01
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts