基于python,plot如何画等高线/等温线/等压线/决策边界图?
发布于 作者:苏南大叔 来源:程序如此灵动~python
画图中有一种边界图,或者称为等高线图/等温线图/等压线图。在人工智能里面,称之为决策边界图。其实,背后的原理都是一样的,都是来自于matplotlib.pyplot
的contourf()
函数。它可以根据输入的数据绘制出二维数据集的边界线图像。在本文中,苏南大叔将对其做个简单的探索。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验总结。本文测试环境:win10
,python@3.11.0
,numpy@1.24.2
,matplotlib@3.7.1
。
数据准备
数据准备的话,还是基于下面文章的数据范例。参考文章:
import numpy as np
x = np.arange(0, 12, 3)
y = np.linspace(0, 12, 3)
xx, yy = np.meshgrid(x, y)
总之,这里拿到了待处理的原始网格点信息。
准备决策数据
然后需要的数据是等高线数据,这个是重点哦。整个边界图的样子(漂亮程度、线条走向)的主要依据来源,就是下面这个数据了。数据很重要,但是数据的来源逻辑,可就是根据大家的实际情况来编写的了,每个人的写法都不一样。
# 写你自己的逻辑,获得一系列点的数值集合
zz = np.square(xx) - yy
# zz = np.square(xx) - yy > 0
# zz = np.sin(xx) + np.cos(yy)
它的数据就是等高线的“高”,等温线的“温”,等压线的“压”。总之,这里得到的是一系列的数据,contourf()
会对这里的数据进行分组,然后合并成色块进行展示。并且,可能是一些互不相等的数字,也可能只是两种情况的true
和false
。
画等高线【本文主体】
import matplotlib.pyplot as plt
plt.contourf(xx, yy, zz)
# ...
plt.show()
想象成一个三维立体空间坐标系就比较好理解了,x,y
是二维坐标,z
坐标用于在竖直方向上画边界线。
分支一,调整等高线的层次(线条数)
下面代码里面的数字2
就是线条数,这里解释为线条数略有些牵强,待后续补充。
plt.contourf(xx, yy, zz, 2)
这里的线条数设置3,显示处理的分界线就是4。设置5,就显示出来6条分界线。(如果能分开这么多的话)
分支二,设置等高线颜色及colorbar
plt.contourf(xx, yy, zz, cmap="cool")
plt.colorbar()
cmap
参数和color
参数冲突,只能设置一个,推荐设置cmap
。
.colorbar()
就是对于边界线的决策依据做个简单的图例说明。这个暂作伏笔,以后在展开叙述。
图像增益【便于理解】
这部分准备先画个散点图,然后给每个点上加个文字,便于查看理解最终的决策图的决策依据。仅仅是个增益的选项,实际的决策图,没有这些散点,边界图依然是可以画出来的。
plt.scatter(xx, yy)
for xyz in zip(xx.ravel(), yy.ravel(), zz.ravel()):
plt.text(xyz[0], xyz[1], "(%s,%.f => %s)" % xyz)
这部分代码,涉及的参考文章比较多:
- https://newsn.net/say/plot-scatter.html
- https://newsn.net/say/plot-scatter-2.html
- https://newsn.net/say/plot-text.html
- https://newsn.net/say/plot-annotate.html
- https://newsn.net/say/python-zip.html
- https://newsn.net/say/ndarray-flatten.html
结束语
plot
画图,在大数据的数据展示层面,是非常重要的。更多python
相关文章,请参考苏南大叔的文章链接:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。