我有這樣一組數據記錄:Matplotlib:繪製衆多斷開線段具有不同顏色
(s1, t1), (u1, v1), color1
(s2, t2), (u2, v2), color2
.
.
.
(sN, tN), (uN, vN), colorN
在任何記錄中,前兩個值是端點的線段的,第三個值是該線段的顏色。更具體地說,(sn, tn)
是第一端點的x-y座標,(un, vn)
是第二端點的x-y座標。另外,顏色是一個具有alpha值的rgb。
一般來說,任意兩條線段都是斷開(意思是它們的終點不一定重合)。
如何使用一個單一的plot
調用(或儘可能少)密謀用matplotlib這個數據可能存在潛在的幾千條記錄。
嘗試
在一個大名單準備數據和呼叫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)
這會在我的機器上執行一秒鐘。我仍然需要弄清楚如何嵌入顏色值(帶alpha通道的RGB)。
不使用'nan'代替'None'沒有任何區別,它會產生相同的情節,但我可以使用'numpy.tile'和'numpy.repeat'來構建'x'和'y' inste附加到列表的廣告。你是否也想過如果你可以用這個嵌入顏色(不像'LineColelction'方法)? – dashesy