2016-02-12 4 views
1

Я знаю, что есть еще один очень похожий вопрос, но я не мог извлечь из него необходимую мне информацию.Точки соединения точек подключения

plotting lines in pairs

меня 4 точки в плоскости (х, у): х = [x1, x2, x3, x4] и у = [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() 

Но, кроме четырех точек, я хотел бы иметь 2 линии:

1) одно соединение (x1, y1) с (x2, y2) и 2) второе соединение (x3, y3) с (x4, y4).

Это простой пример игрушки. В реальном случае у меня есть 2N точек в плоскости.

Как я могу получить желаемый результат: для точек с двумя соединительными линиями?

спасибо.

ответ

3

Я думаю, что вы будете нуждаться в отдельные строки для каждого сегмента:

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() 

(The numpy импорт просто настроить некоторые случайные 2x10 выборочные данные)

enter image description here

1

Вы можете просто передать список двух пунктов, которые хотите подключиться к 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, мы можем просто положить его в цикле:

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-') 
+0

Это делает работу. Но, как я уже сказал, в целом у меня есть 2N баллов, где N может составлять 50, например. Тогда проблема заключается в необходимости писать все это явно. Существует ли более компактный способ сделать это для общего случая 2N (N = 2 для этого случая)? – Mencia

+0

Конечно, мы можем использовать цикл for; см. мое редактирование – tom

Смежные вопросы