Когда список сегментов строки большой, вы можете повысить производительность, используя LineCollection
вместо нескольких вызовов plt.plot
:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.collections as mcoll
xs = [[11, 20], [31, 31], [32, 33]]
ys = [[1, 10], [3, 4], [6, 10]]
fig, ax = plt.subplots()
# https://matplotlib.org/gallery/color/color_cycle_default.html
prop_cycle = plt.rcParams['axes.prop_cycle']
colors = prop_cycle.by_key()['color']
segments = np.array(list(zip(xs, ys))).swapaxes(1,2)
line_segments = mcoll.LineCollection(segments, colors=colors)
ax.add_collection(line_segments)
ax.set(xlim=(10,34), ylim=(0,11))
plt.show()

Вот несколько дополнительных примеров, которые используют LineCollection
:
LineCollection
ожидает, что первый аргумент будет последовательностью формы [(pt0, pt1), (pt2, pt3), (pt4, pt5), ...]
, где каждый pt
имеет форму (x-coord, y-coord)
.
Затем Matplotlib отобразит это LineCollection
как отрезки
pt0 --> pt1
pt2 --> pt3
pt4 --> pt5
etc.
Причина использования swapaxes
в приведенном выше коде заключается в том, что zip(xs, ys)
создает пары вида ((x0, x1), (y0, y1))
, тогда как
LineCollection
хочет, чтобы пары точек имели форму ((x0, y0), (x1, y1))
.