从有序数据集中提取连接线

时间:2017-05-26 15:27:49

标签: python matplotlib

我有一个类似于下图所示的数据集,有几条断开的平滑曲线。我想要用一条线连接每条曲线内的标记,而不是绘制标记。怎么做?

lsei(E,F,G,H,A=diag(nrow=100),B=rep(0,100))$X

enter image description here

2 个答案:

答案 0 :(得分:2)

可以使用plot而不是scatter绘制线条图。这里的问题是所有点将被连接。 所以使用plt.plot(x,y)会产生类似这样的东西 enter image description here

这个想法是将线条分成它们应该不连续的位置。我们可以使用这样一个事实,即一个坐标是nan值的点没有显示并打破了这一行。

需要找出分割的位置。在这种情况下,它相当简单:它是关于x或y的导数是负的。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.1,0.9,50)
y = x%1
x += np.sin(2*x%1)
y = y%0.2

def split(x,y):
    ind = np.arange(0,len(x)-1)[np.diff(y) < 0]+1
    return np.insert(y, ind, np.nan), np.insert(x, ind, np.nan)

x,y = split(*split(x,y))


plt.scatter(x,y)
plt.plot(x,y)
plt.show()

enter image description here

答案 1 :(得分:1)

您需要首先检测形成感知线的标记。

你的数据只是一堆点,我打赌列表中的连续点不要形成整齐的线条。当您查看绘制的图片时,您的大脑会检测到该结构,而不是您的代码。

一种可能的工具是聚类算法(存在多种实现,例如在scikit中)。