绘制连接点的线

Men*_*cia 17 matplotlib

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

绘制成对的线条

我在(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]
Run Code Online (Sandbox Code Playgroud)

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

import matplotlib.pyplot as plt

plt.plot(x,y, 'ro')
plt.axis('equal')
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,除了这四点,我想有两条线:

1)一个连接(x1,y1)(x2,y2)和2)第二一个连接(x3,y3)(x4,y4).

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

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

谢谢.

xnx*_*xnx 24

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

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()
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述


小智 11

我意识到很久以前就有人问过并回答了这个问题,但答案并没有给出我认为最简单的解决方案。尽可能避免循环几乎总是一个好主意,并且 matplotlibplot能够使用一个命令绘制多行。如果xy是数组,plot则为每一列画一条线。

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

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')
Run Code Online (Sandbox Code Playgroud)

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

xx = np.vstack([x[0::2],x[1::2]])
yy = np.vstack([y[0::2],y[1::2]])
Run Code Online (Sandbox Code Playgroud)

想要为点和线指定(不同)的颜色吗?

plt.plot(xx,yy, '-ok', mfc='C1', mec='C1')
Run Code Online (Sandbox Code Playgroud)

两对点的图,每对点由一条单独的线连接

  • 这应该是公认的答案,也是 matplotlib 的使用方式! (3认同)

tmd*_*son 10

您只需传递要连接的两个点的列表即可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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

注意,该函数是一个通用函数,可以将列表中的任意两个点连接在一起.

为了扩大这2n个点,假设你总是点连接i到一点i+1,我们就可以把它放在一个for循环:

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

在始终连接点的情况下i,以点i+1,你可以简单地做:

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