Matplotlib: Drukowanie wielu odłączonych segmentów linii o różnych kolorach

Mam taki zestaw rekordów danych:

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

W każdym rekordzie pierwsze dwie wartości topunkty końcowe segmentu linii, trzecia wartość tokolor tego segmentu linii. Dokładniej,(sn, tn) są współrzędnymi x-y pierwszego punktu końcowego,(un, vn) są współrzędnymi x-y drugiego punktu końcowego. Również,kolor to rgb z wartością alfa.

Ogólnie rzecz biorąc, dowolne dwa segmenty linii sąniepowiązany (co oznacza, że ​​ich punkty końcowe niekoniecznie pokrywają się).

Jak wydrukować te dane za pomocąmatplotlib z singlemplot zadzwoń (lub tak mało, jak to możliwe), ponieważ mogą istnieć potencjalnie tysiące rekordów.

Próbowanie

Przygotowanie danych na jednej dużej liście i wywołanieplot przeciwko niemu jest zbyt wolny. Na przykład następujący kod nie mógł zakończyć się w rozsądnym czasie:

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

Udało mi się przyspieszyć renderowanie fabuły za pomocąŻaden sztuczka wstawiania w następujący sposób:

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)

To wykonuje się w niecałą sekundę na moim komputerze. Nadal muszę wymyślić, jak osadzić wartości kolorów (RGB z kanałem alfa).

questionAnswers(4)

yourAnswerToTheQuestion