本文主要是介绍Maplotlib可视化--散点图中包围数据集的点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在散点图中包围不同数据集
1、导入使用的库
import matplotlib.pyplot as plt
import numpy as np
from scipy.spatial import ConvexHull
2、绘制简单的散点图
x1 = [1,2,4,5,6]
x2 = [4,2,5,6,3]
plt.scatter(x1,x2);
3、绘制多边形
3.1、构造坐标
p = np.c_[x1,x2] # p是x1为横坐标,x2为纵坐标的点(第0列是x1,第1列是x2)
print(p)
[[1 4][2 2][4 5][5 6][6 3]]
np.c中c代表cloumn是列的意思,np.c就是将两个矩阵按列连接
np.r中c代表row是行的意思,np.c就是将两个矩阵按行连接
3.2、获得点集的凹包
# 点集的凸包 https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.ConvexHull.html
hull = ConvexHull(p)
print(hull)
print(hull.vertices) # [3 0 1 4]
print(p[hull.vertices,:]) # [[5 6][1 4][2 2][6 3]](即构造多边形点的坐标)
<scipy.spatial.qhull.ConvexHull object at 0x7fc3ff2a6b90>
[3 0 1 4]
[[5 6][1 4][2 2][6 3]]
ConvexHull的文档
3.3 完整示例
x1 = [1,2,4,5,6]
x2 = [4,2,5,6,3]
plt.scatter(x1,x2);def encircle(x,y, ax=None, **kw):if not ax: ax=plt.gca()p = np.c_[x,y]hull = ConvexHull(p)poly = plt.Polygon(p[hull.vertices,:], **kw) # 画多边形ax.add_patch(poly) # 将图形添加到图中encircle(x1, x2, ec="k", fc="red", alpha=0.2)
还可以包围不同数据集的点,这里就不在叙述,可以参考这篇文章:
How do I encircle different data sets in scatter plot?
这篇关于Maplotlib可视化--散点图中包围数据集的点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!