Matplotlib: построение множества разрозненных отрезков с разными цветами

У меня есть набор записей данных, как это:

(s1, t1), (u1, v1), color1
(s2, t2), (u2, v2), color2
.
.
.
(sN, tN), (uN, vN), colorN

В любой записи первые два значения являютсяКонечные точки отрезка, третье значениецвет этого отрезка. Более конкретно,(sn, tn) координаты x-y первой конечной точки,(un, vn) являются координатами x-y второй конечной точки. Также,цвет RGB с альфа-значением.

В общем, любые два отрезкаотсоединены (это означает, что их конечные точки не обязательно совпадают).

Как построить эти данные, используяMatplotlib с однимplot звоните (или как можно меньше), так как потенциально могут быть тысячи записей.

попытки

Подготовка данных в один большой список и вызовplot против этого слишком медленно. Например, следующий код не может завершиться за разумное время:

import numpy as np
import matplotlib.pyplot as plt

data = []
for _ in xrange(60000):
    data.append((np.random.rand(), np.random.rand()))
    data.append((np.random.rand(), np.random.rand()))
    data.append('r')

print 'now plotting...' # from now on, takes too long
plt.plot(*data)
print 'done'
#plt.show()

Я смог ускорить рендеринг сюжета с помощьюНикто Трюк вставки следующим образом:

import numpy as np
import matplotlib.pyplot as plt
from timeit import timeit

N = 60000
_s = np.random.rand(N)
_t = np.random.rand(N)
_u = np.random.rand(N)
_v = np.random.rand(N)
x = []
y = []
for s, t, u, v in zip(_s, _t, _u, _v):
    x.append(s)
    x.append(u)
    x.append(None)
    y.append(t)
    y.append(v)
    y.append(None)
print timeit(lambda:plt.plot(x, y), number=1)

Это выполняется менее чем за секунду на моей машине. Я все еще должен выяснить, как встраивать значения цвета (RGB с альфа-каналом).

Ответы на вопрос(4)

Ваш ответ на вопрос