python - 如何在散点图中圈出不同的数据集?

标签 python matplotlib graph latex data-analysis

<分区>

如何在散点图中圈出不同的数据集?

我正在寻找的是这样的:

encircle different data sets in scatter plot

此外,我之后如何用(阴影)颜色填充圆圈?

最佳答案

您可以通过凸包 scipy.spatial.ConvexHull 获得包含所有点的路径。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
from scipy.spatial import ConvexHull

x1, y1 = np.random.normal(loc=5, scale=2, size=(2,15))
x2, y2 = np.random.normal(loc=8, scale=2.5, size=(2,13))

plt.scatter(x1, y1)
plt.scatter(x2, y2)

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, y1, ec="k", fc="gold", alpha=0.2)
encircle(x2, y2, ec="orange", fc="none")

plt.show()

enter image description here

另一种选择是围绕点云的平均值画一个圆。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
from scipy.spatial import ConvexHull

x1, y1 = np.random.normal(loc=5, scale=2, size=(2,15))
x2, y2 = np.random.normal(loc=8, scale=2.5, size=(2,13))

plt.scatter(x1, y1)
plt.scatter(x2, y2)


def encircle2(x,y, ax=None, **kw):
    if not ax: ax=plt.gca()
    p = np.c_[x,y]
    mean = np.mean(p, axis=0)
    d = p-mean
    r = np.max(np.sqrt(d[:,0]**2+d[:,1]**2 ))
    circ = plt.Circle(mean, radius=1.05*r,**kw)
    ax.add_patch(circ)

encircle2(x1, y1, ec="k", fc="gold", alpha=0.2)
encircle2(x2, y2, ec="orange", fc="none")

plt.gca().relim()
plt.gca().autoscale_view()
plt.show()

enter image description here

关于python - 如何在散点图中圈出不同的数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575681/

相关文章:

python - 在 Pytorch 上实现 VGG16 给出大小不匹配错误

python - 在没有 pip 的情况下安装 matplotlib 和 numpy

python - 如何使用 matplotlib 创建具有不同长度的多个数组的直方图,其中 y 轴上有百分比

database - 用于无向图的Nosql DB?

python - 在 Python 中计算两个字典之间的值

python - 在 json 上上传图像 DJANGO REST FRAMEWORK

python - 在终止 python 程序时做一些事情

python - 如何在 matplotlib 中制作自定义图例

data-structures - 在 Neo4j 中创建独特的结构,它们的节点是另一个结构的一部分

optimization - 数据关系的复杂合并