绘制连接点

时间:2016-02-12 13:08:52

标签: matplotlib

我知道还有另一个非常相似的问题,但我无法从中提取所需的信息。

plotting lines in pairs

我在(x,y)平面上有4个点:x=[x1,x2,x3,x4]y=[y1,y2,y3,y4]

x=[-1 ,0.5 ,1,-0.5]
y=[ 0.5,  1, -0.5, -1]

现在,我可以通过以下方式绘制四点:

import matplotlib.pyplot as plt

plt.plot(x,y, 'ro')
plt.axis('equal')
plt.show()

但是,除了这四点之外,我想有两行:

1)将(x1,y1)(x2,y2)连接起来 2)第二个将(x3,y3)(x4,y4)连接起来。

这是一个简单的玩具示例。在实际情况中,我在飞机上有2N点。

如何获得所需的输出:对于有两条连线的点?

谢谢。

4 个答案:

答案 0 :(得分:18)

我认为每个细分市场都需要单独的行:

import numpy as np
import matplotlib.pyplot as plt

x, y = np.random.random(size=(2,10))

for i in range(0, len(x), 2):
    plt.plot(x[i:i+2], y[i:i+2], 'ro-')

plt.show()

numpy导入只是为了设置一些随机的2x10样本数据)

enter image description here

答案 1 :(得分:8)

您只需将要连接的两个点的列表传递给plt.plot即可。为了使这个可以轻松扩展到你想要的任意点,你可以定义一个这样的函数。

import matplotlib.pyplot as plt

x=[-1 ,0.5 ,1,-0.5]
y=[ 0.5,  1, -0.5, -1]

plt.plot(x,y, 'ro')

def connectpoints(x,y,p1,p2):
    x1, x2 = x[p1], x[p2]
    y1, y2 = y[p1], y[p2]
    plt.plot([x1,x2],[y1,y2],'k-')

connectpoints(x,y,0,1)
connectpoints(x,y,2,3)

plt.axis('equal')
plt.show()

enter image description here

注意,该功能是一般功能,可以将列表中的任意两个点连接在一起。

要将此扩展为2N点,假设您始终将点i连接到点i+1,我们可以将其置于for循环中:

import numpy as np
for i in np.arange(0,len(x),2):
    connectpoints(x,y,i,i+1)

在总是将点i连接到点i+1的情况下,您可以这样做:

for i in np.arange(0,len(x),2):
    plt.plot(x[i:i+2],y[i:i+2],'k-')

答案 2 :(得分:5)

我知道这个问题是很久以前问过的,但是答案并没有给出我认为是最简单的解决方案。尽可能避免循环几乎总是一个好主意,并且matplotlib的$sql = "SELECT * FROM files where departmentid=".$_SESSION['deptid'].""; $deptids = implode(',', $_POST['deptid']); 能够用一个命令绘制多条线。如果plotx是数组,则y为每一列绘制一行。

根据您的情况,您可以执行以下操作:

plot

有很长的x和y列表,并且想连接相邻的对吗?

x=np.array([-1 ,0.5 ,1,-0.5])
xx = np.vstack([x[[0,2]],x[[1,3]]])
y=np.array([ 0.5,  1, -0.5, -1])
yy = np.vstack([y[[0,2]],y[[1,3]]])
plt.plot(xx,yy, '-o')

是否需要为点和线指定(不同)颜色?

xx = np.vstack([x[0::2],x[1::2]])
yy = np.vstack([y[0::2],y[1::2]])

Plot of two pairs of points, each connected by a separate line

答案 3 :(得分:1)

使用matplotlib.arrow()功能并将参数head_length和head_width设置为零,以获得" arrow-end"。 可以使用向量加法简单地计算不同点之间的连接: A = [1,2],B = [3,4] - > A和B之间的连接是B-A = [2,2]。 从A的尖端开始绘制此向量在B的末端结束。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use('fivethirtyeight')


A = np.array([[10,8],[1,2],[7,5],[3,5],[7,6],[8,7],[9,9],[4,5],[6,5],[6,8]])


fig = plt.figure(figsize=(10,10))
ax0 = fig.add_subplot(212)

ax0.scatter(A[:,0],A[:,1])


ax0.arrow(A[0][0],A[0][1],A[1][0]-A[0][0],A[1][1]-A[0][1],width=0.02,color='red',head_length=0.0,head_width=0.0)
ax0.arrow(A[2][0],A[2][1],A[9][0]-A[2][0],A[9][1]-A[2][1],width=0.02,color='red',head_length=0.0,head_width=0.0)
ax0.arrow(A[4][0],A[4][1],A[6][0]-A[4][0],A[6][1]-A[4][1],width=0.02,color='red',head_length=0.0,head_width=0.0)


plt.show()

enter image description here