我有一个类似于下图所示的数据集,有几条断开的平滑曲线。我想要用一条线连接每条曲线内的标记,而不是绘制标记。怎么做?
lsei(E,F,G,H,A=diag(nrow=100),B=rep(0,100))$X
答案 0 :(得分:2)
可以使用plot
而不是scatter
绘制线条图。这里的问题是所有点将被连接。
所以使用plt.plot(x,y)
会产生类似这样的东西
这个想法是将线条分成它们应该不连续的位置。我们可以使用这样一个事实,即一个坐标是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()
答案 1 :(得分:1)
您需要首先检测形成感知线的标记。
你的数据只是一堆点,我打赌列表中的连续点不要形成整齐的线条。当您查看绘制的图片时,您的大脑会检测到该结构,而不是您的代码。
一种可能的工具是聚类算法(存在多种实现,例如在scikit
中)。