第92天:Python Matplotlib 进阶操作

本章节主要是 Matplotlib 和 NumPy  实际操作案例讲解,matplotlib 通常与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案,除此之外,它还可以和其他图形工具包搭配使用。前提是在现在的环境中已经安装了 Numpy 模块,Numpy 安装详情请参考第79天:数据分析之 Numpy 初步

这一节将从简到繁用实例讲解 matplotlib 和 Numpy 结合使用的知识点。

1、折线图

使用 Numpy的函数 np.arange() 函数创建 x 轴上的值。将 y 轴上的对应值存储在另一个数组对象 y 中。这些值使用 matplotlib 软件包的 pyplot 子模块的 plot() 函数绘制。

实例如下:

# 导入模块import numpy as npimport matplotlib.pyplot as plt
# 绘制 x 轴数据x = np.arange(2,15)y = 3 * x+6
# 给图形设置标题plt.title('line chart')# 设置 x 轴和 y 轴的属性名plt.xlabel("x axis")plt.ylabel("y axis")
# 绘制图形plt.plot(x,y)
# 显示图形plt.show()

以上程序运行结果图:

注意:作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值,可以使用以下格式化字符,表格如下:

字符 描述
'-' 实线样式
'--' 短横线样式
'-.' 点划线样式
':' 虚线样式
'.' 点标记
',' 像素标记
'o' 圆标记
'v' 倒三角标记
'^' 正三角标记
'<' 左三角标记
'>' 右三角标记
'1' 下箭头标记
'2' 上箭头标记
'3' 左箭头标记
'4' 右箭头标记
's' 正方形标记
'p' 五边形标记
'*' 星形标记
'h' 六边形标记 1
'H' 六边形标记 2
'+' 加号标记
'x' X 标记
'D' 菱形标记
'd' 窄菱形标记
'|' 竖直线标记
'_' 水平线标记

图形显示颜色缩写简写表格如下:

字符 颜色
'b' 蓝色
'g' 绿色
'r' 红色
'c' 青/绿色
'm' 品红色
'y' 黄色
'k' 黑色
'w' 白色
'o' 橙色

2、散点图

使用以上两个表格表示的简化符号画一个绿色散点图,散点使用 'o'表示,,具体实例如下:

# 导入模块import numpy as npimport matplotlib.pyplot as plt
x = np.arange(2, 15)y = 2 * x + 6plt.title("scatter chart")plt.xlabel("x axis")plt.ylabel("y axis")
# 设置图形样式和颜色plt.plot(x, y, "oc")plt.show()

以上程序运行结果为:

例如绘制一个倒三角图形:

# 导入模块import numpy as npimport matplotlib.pyplot as plt
x = np.arange(2, 15)y = 2 * x + 6plt.title("triangle_scatter chart")plt.xlabel("x axis")plt.ylabel("y axis")
# 设置图形样式和颜色plt.plot(x, y, "^c")plt.show()

显示结果如下:

3、正余弦波形图

正弦波形图

正弦波形图的绘制需要用到 Numpy 的数学函数 sin() 和 cos(),详细的数学函数使用请参考 NumPy 系列文章:第 84 天:NumPy 数学函数

import numpy as npimport matplotlib.pyplot as plt
# 计算正弦曲线上点的 x 和 y 坐标print(np.pi)
# 绘制 x 轴,从 0 开始,x = np.arange(0, 3 * np.pi, 0.1)y = np.sin(x)
# 设置标题plt.title("sine wave form")
# 绘制图形点plt.plot(x, y, 'y')plt.show()

显示结果:

余弦波形图

import numpy as npimport matplotlib.pyplot as plt
# 计算正弦曲线上点的 x 和 y 坐标print(np.pi)
# 绘制 x 轴,从 0 开始,x = np.arange(0, 4 * np.pi, 0.1)y = np.cos(x)
# 设置标题plt.title("cosine wave form")
# 绘制图形点plt.plot(x, y, 'm')plt.show()

正余弦波形图

在一张图中显示出正弦函数和余弦函数,这里需要使用 subplot 来建立网格图,一幅图中使用两个网格,两个网格中分别展示正弦函数和余弦函数;subplot 函数使用说明如下:

matplotlib 中, 一个 Figure 对象可以包含多个子图(Axes), 可以使用 subplot() 快速绘制, 调用形式如下 :

subplot(numRows, numCols, plotNum)

参数说明:

  • 图表的整个绘图区域被分成 numRows 行和 numCols 列
  • 然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1,左下子区域编号为3,右上子区域编号为2,右下子区域编号为 4,当然具体的还要看指定网格的行数和列数而定。
  • plotNum 参数指定创建的 Axes 对象所在的区域

网格编号图如下:

假如 numRows = 2, numCols = 3, 那整个绘制图表样式为 2X3 的图片区域, 用坐标表示为

(1, 1), (1, 2), (1, 3)(2, 1), (2, 2), (2, 3)

再当 plotNum = 3 时, 表示的坐标为(1, 3), 即第一行第三列的子图 如果 numRows, numCols 和 plotNum 这三个数都小于 10 的话, 可以把它们缩写为一个整数, 例如 subplot(323) 和 subplot(3,2,3) 是相同的。

subplot 在 plotNum 指定的区域中创建一个轴对象, 如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。

例1:上述网格编号图代码如下

import matplotlib.pyplot as plt
plt.subplot(2,2,1)plt.xticks([]), plt.yticks([])plt.text(0.5,0.5, 'subplot(2,2,1)',ha='center',va='center',size=20,alpha=.5)
plt.subplot(2,2,2)plt.xticks([]),plt.yticks([])plt.text(0.5,0.5, 'subplot(2,2,2)',ha='center',va='center',size=20,alpha=.5)
plt.subplot(2,2,3)plt.xticks([]), plt.yticks([])plt.text(0.5,0.5, 'subplot(2,2,3)',ha='center',va='center',size=20,alpha=.5)
plt.subplot(2,2,4)plt.xticks([]), plt.yticks([])plt.text(0.5,0.5, 'subplot(2,2,4)',ha='center',va='center',size=20,alpha=.5)
plt.show()

例4:

import matplotlib.pyplot as plt
plt.subplot(211) # 第一行的左图plt.subplot(212) # 第一行的右图
plt.show()

还可以表示为:

import matplotlib.pyplot as plt
plt.subplot(2,1,1)#设置 x 和 y 轴上的值plt.xticks([]), plt.yticks([]) # 表示无显示值plt.text(0.5,0.5, 'subplot(2,1,1)',ha='center',va='center',size=24,alpha=.5)
plt.subplot(2,1,2)plt.xticks([]), plt.yticks([])plt.text(0.5,0.5, 'subplot(2,1,2)',ha='center',va='center',size=24,alpha=.5)
plt.show()

结果显示:

网格图1:

网格图2:

所以正余弦函数波形图可以表示为:


# 计算正弦和余弦曲线上的点的 x 和 y 坐标x = np.arange(0, 3 * np.pi, 0.1)y_sin = np.sin(x)y_cos = np.cos(x)
# 建立 subplot 网格,高为 2,宽为 1# 激活第一个 subplotplt.subplot(2, 1, 1)# 绘制第一个图像plt.plot(x, y_sin)plt.title('Sine')
# 将第二个 subplot 激活,并绘制第二个图像plt.subplot(2, 1, 2)plt.plot(x, y_cos)plt.title('Cosine')
# 展示图像plt.show()

最后图形展示:

4、直方图

直方图也称条形图,pyplot 子模块提供 bar() 函数来生成条形图,下面的实例是一个使用 bar() 函数生成的一个简单的柱状图. 实例如下:

import matplotlib.pyplot as plt
# 设置 x 的 x 轴和 y 轴数值x = [5,8,10]y = [12,16,6]
# 设置 x2 的 x 轴和 y 轴数值x2 = [6,9,11]y2 = [6,15,7]
# 使用 bar() 函数设置条形图的颜色和对齐方式plt.bar(x, y,color='y', align='center')plt.bar(x2, y2, color='c', align='center')
# 设置标题plt.title('Bar chart')# 设置 x 轴和 y 轴的属性名plt.ylabel('Y axis')plt.xlabel('X axis')
# 展示图形plt.show()

程序运行结果为:

Matplotlib 结合 NumPy 使用:

这时候需要用到 NumPy 中的直方统计函图:histogram

histogram(a,bins=10,range=None,weights=None,density=False);

参数说明:

  • a 是待统计数据的数组;
  • bins指定统计的区间个数;
  • range是一个长度为2的元组,表示统计范围的最小值和最大值,默认值 None,表示范围由数据的范围决定
  • weights为数组的每个元素指定了权值,histogram()会对区间中数组所对应的权值进行求和
  • densityTrue 时,返回每个区间的概率密度;为 False,返回每个区间中元素的个数

函数说明:

  • numpy.histogram() 函数是数据的频率分布的图形表示。水平尺寸相等的矩形对应于类间隔,称为 bin,变量 height 对应于频率。
  • numpy.histogram() 函数将输入数组和 bin 作为两个参数。bin 数组中的连续元素用作每个 bin 的边界。

例如:

import numpy as np
# 赋值数组 aa = np.array([22, 87, 5, 43, 56, 73, 55, 54, 11, 20, 51, 5, 79, 31, 27])
# 调用函数np.histogram(a, bins=[0, 20, 40, 60, 80, 100])hist, bins = np.histogram(a, bins=[0, 20, 40, 60, 80, 100])
# 输出值print(hist)print(bins)

输出结果为:

[3 4 5 2 1][ 0 20 40 60 80 100]

plt()函数使用:

Matplotlib 可以将直方图的数字表示转换为图形。pyplot 子模块的 plt() 函数将包含数据和 bin 数组的数组作为参数,并转换为直方图,例如:

import numpy as npimport matplotlib.pyplot as plt
# 赋值数组 aa = np.array([22, 87, 43, 56, 73, 55, 11, 20, 51, 5, 79, 27,100])
# plt() 函数将数据变为直方图plt.hist(a, bins=[0,20,40,60,80,100])plt.title("histogram")# 显示图形plt.show()

显示结果:

5、曲线图

例1:一个简单的曲线图

画出一个简单的曲线图,如下所示:

import matplotlib.pyplot as pltimport numpy as np
n = 256X = np.linspace(-np.pi,np.pi,n,endpoint=True)Y = np.sin(2*X)
plt.plot (X, Y+1, color='blue', alpha=1.00)plt.plot (X, Y-1, color='blue', alpha=1.00)
plt.title('curve_chart1')plt.show()

结果展示为:

例2:升级版的曲线图

import numpy as npimport matplotlib.pyplot as plt
n = 256X = np.linspace(-np.pi,np.pi,n,endpoint=True)Y = np.sin(2*X)
plt.plot (X, Y+1, color='blue', alpha=1.00)plt.fill_between(X, 1, Y+1, color='blue', alpha=.25)
plt.plot (X, Y-1, color='blue', alpha=1.00)
# 设置线条颜色和填充颜色区域plt.fill_between(X, -1, Y-1, (Y-1) > -1, color='blue', alpha=.25)plt.fill_between(X, -1, Y-1, (Y-1) < -1, color='red', alpha=.25)
plt.title('curve_chart2')plt.show()

结果展示为:

总结

本章节是 Matplotlib 结合 NumPy 使用的画图方法,主要介绍了折线图、正余弦波形图、方形图、曲线图的基本画法,同时也详细讲述了子图 subplot的基本使用方法,希望以上知识点能对学习这一模块的伙伴们提供更好支撑,若有任何问题欢迎在交流群中进行交流 :)

参考

https://www.runoob.com/numpy/numpy-matplotlib.html

https://www.runoob.com/w3cnote/matplotlib-tutorial.html

https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py

文中示例代码:https://github.com/JustDoPython/python-100-day

系列文章

第91天:Python matplotlib introduction

从 0 学习 Python 0 - 90 大合集总结

(0)

相关推荐

  • 6行python代码的爱心线

    前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧.实际上,当时有效偏颇了,忽略了问题 ...

  • 三维散点图

    上篇主要介绍了s,c,marker参数,scatter函数还有其他的参数,比如: 1.alpha,表示透明程序,取值 0(透明)和1(不透明)之间,默认值:1. 2.edgecolors,表示边缘颜色 ...

  • 手把手教你用Matplotlib进行数据可视化

    导读:Matplotlib是建立在NumPy数组上的一个多平台数据可视化库.在2002年,约翰·亨特(John Hunter)提出Matplotlib,最初的构思是设计为IPython的一个补丁,以便 ...

  • 散点图

    最近好像不想动,只想追剧,追综艺,追电影,追小说,就是不想费脑子,感觉想要飞上天...... 来点绿色洗洗眼. 散点图,就是在坐标系里画点点点的图,尤其应用在回归分析中经常画. 要绘制散点图,主要是要 ...

  • matplotlib pyplot 画图基础教程

    用Python绘制图表在工作中是一项非常有用的技能,虽然说强大的matlab基本可以满足我们所有的绘图需求,但是在有些情况下,使用Python绘图,让图表直接可以直接随着Python程序的运行而产生. ...

  • python+opencv图像处理(十三)

    直方图 又回到了校园,空气是如此的新鲜,人是如此的少...... 心情有点微妙... 看一看窗户外面的天... 直方图,在高中数学里好像就出现了. 它是数值数据分布的图形表示. 在Python里,直方 ...

  • 基于OpenCV的图像强度操作

    重磅干货,第一时间送达 01. 什么是图像强度操作 更改任何通道中的像素值 对图像的数学运算 亮度变化 对比度变化 伽玛操纵 直方图均衡 图像预处理中的滤波等增强 使用OpenCV加载图像 impor ...

  • Python matplotlib绘制图形,包括点、曲线、注释和箭头

    Python的matplotlib模块绘制图形功能很强大,今天就用pyplot绘制一个简单的图形,图形中包括曲线.曲线上的点.注释和指向点的箭头. 1. 结果预览: 2. 代码如下: from mat ...

  • matplotlib作图之注释

    不写python的日子每天都觉得没啥意思,重新搞起~ matplotlib中图的注释 直接上代码看例子: import numpy as np import matplotlib.pyplot as ...

  • 解放你的双手,21个python的骚操作,直呼牛逼(下)

    废话不多说,接上直接开整,我会以图片的形式放给大家看,不要想着偷偷复制,做编程就得边看边敲!!!

  • Python爬虫进阶:爬取梨视频网站Top排行榜视频数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于青灯编程 ,作者:清风 Python爬虫进阶:反反爬实战案例-爬取梨 ...

  • 第50天:Python Queue 进阶用法

    上一篇文章简单介绍了 Queue 的入门操作,今天我们学习下 Queue 的进阶用法. 生产者消费者模型 在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗.分类和入 ...

  • 第91天:Python matplotlib introduction

    今天我们一起来探究 Python 中一个很有趣的模块--Matplotlib,Matplotlib 是一个非常优秀的 Python 2D 绘图库,只要给出符合格式的数据,通过 Matplotlib 就 ...

  • 一次性掌握所有 Python 画图基础操作

    p y t h o n python python 画图介绍 本文以实用为第一目标,保证读者在看完此文之后可以迅速上手 p y t h o n python python 画图,掌握所有画图的基本技巧 ...

  • Python Matplotlib简易教程

    详情请见:Matplotlib python 数据可视化神器 简单演示 import matplotlib.pyplot as pltimport numpy as np# 从[-1,1]中等距去50 ...

  • Python 炫技操作:五种 Python 转义表示法

    转自:Python编程时光 1. 为什么要有转义? ASCII 表中一共有 128 个字符.这里面有我们非常熟悉的字母.数字.标点符号,这些都可以从我们的键盘中输出.除此之外,还有一些非常特殊的字符, ...

  • Python 时间格式操作总结

    作者:Peter来源:Python编程时光在生活和工作中,我们每个人每天都在和时间打交道:早上什么时候起床?地铁几分钟来一趟?中午什么时候开始午休?明天是星期几?距离上次买衣服已经2个月呢?领导让我给 ...