Python绘制点与点之间的连接线问题

Python绘制点与点之间的连接线问题,python,matplotlib,plot,lines,Python,Matplotlib,Plot,Lines,尝试使用曲线拟合来拟合sin函数。当绘制拟合和点时,我得到了一些我不知道如何解释的东西,所以我最好发布一些图像 使用以下代码行生成: plt.plot(phase_min, sinusoidal_function(phase_min, *popt), '.', lw=3) 使用线条样式“-”,我得到: 我怎么能用一条该死的线连接每个相邻的点,而不是中间的所有点? 谢谢 您可以使用np.argsort: order = np.argsort(x) xsorted = x[order] yso

尝试使用曲线拟合来拟合sin函数。当绘制拟合和点时,我得到了一些我不知道如何解释的东西,所以我最好发布一些图像

使用以下代码行生成:

plt.plot(phase_min, sinusoidal_function(phase_min, *popt), '.', lw=3)

使用线条样式“-”,我得到:

我怎么能用一条该死的线连接每个相邻的点,而不是中间的所有点?
谢谢

您可以使用
np.argsort

order = np.argsort(x)
xsorted = x[order]
ysorted = y[order]

其中,
x
y
是橙色点的坐标。

matplotlib
中绘制直线时,它会自动按照提供的顺序连接点。请参见下面的示例:

import matplotlib.pyplot as plt
plt.plot([1,3,2], [1,2,3])

您的问题是您的
phase\u min
未排序,并且
matplotlib
正在尝试按顺序连接数据点。实际上,由于您已经得到拟合函数,因此不需要使用原始数据来绘制函数。您只需定义要绘制直线的数据点,如下所示。通过这种方式,可以创建任意数量的数据点,因此,与使用原始数据点进行绘制相比,绘制线将更加平滑

x=np.arange(0, 1, 0.001)
y=sinusoidal_function(x, *popt)
plt.plot(x,y)

您是否已对阶段进行分类?我想我不需要。phase_min从phase开始,phase已排序。我猜它继承了这种行为?(这里的初学者)我想还没有整理好。你可以打印出来检查一下。同样,在曲线拟合之后,您不需要根据原始变量值绘制拟合曲线,您应该为要绘制的范围绘制x值。试着这样做:
x=np.arange(0,1,0.001),y=sinusic_函数(x,*popt),plt.plot(x,y)
@LongwenOu刚刚验证了它没有被排序。在整理之后,我得到了一些奇怪的东西,你可以在这里看到:@LongwenOu确实解决了这个问题,但我不明白它是如何或为什么这样做的。我不确定我是否理解。排序阶段给了我一些奇怪的东西,技巧是将
x
y
重新排列在一起。如果只对两个坐标对中的一个进行排序,则会分离出一些奇怪的坐标对。尝试排序
phase\u min
并将yout正弦函数应用于排序后的
phase\u min
,并将排序后的内容用于绘图中的两个数据参数。我只是使用phase\u min.sort()这样做的,我在您的注释上方的链接中得到了绘图。也许您把颜色弄混了?我认为绿色的东西是正弦曲线,橙色的东西是蓝色的,在其他情节中是什么?那么,这将只是一个规模的问题。是吗?我想是这样的。我迷失在试图弄明白这一点,我相信我这里有一个大混乱:)哦,现在我明白了:)这是有道理的。我不明白的是,如果我对phase_min进行排序,为什么仍然会得到奇怪的结果。这应该考虑到点对点的连接,一切都应该井然有序。我错了吗?@nyw您是在拟合过程之前还是之后进行排序?如果在拟合前进行排序,则必须确保
phase_min
y
值之间的对应关系保持不变。因此,只应在拟合过程之后、绘制绘图之前进行排序。尽管如此,还是应该首选上面所示的方法。