Adăugarea de marcaje de linie atunci când se utilizează LineCollection (Programare, Python, Matplotlib)

paep3nguin a intrebat.

Folosesc LineCollection în matplotlib pentru a trasa un număr mare de linii rapid și cu culori diferite. Cu toate acestea, nu găsesc nicio modalitate de a seta un marker de linie pentru linii, chiar și după ce m-am uitat în documentația LineCollection. Există vreo modalitate de a avea markeri de linie atunci când se utilizează LineCollection?

Notă: Utilizarea pyplot.plot() nu este o opțiune, deoarece este prea lentă pentru cazul meu de utilizare, care trasează aproximativ 200 de mii de linii.

Exemplu ilustrat:

Codul utilizat pentru a genera exemplul (sursa originală):

import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

lines = [[(0, 1), (1, 1)], [(2, 3), (3, 3)], [(1, 2), (1, 3)]]

lc = LineCollection(lines, colors=['r', 'g', 'b'])
fig = plt.figure()

ax1 = fig.add_subplot(1, 2, 1)
ax1.add_collection(lc)
ax1.autoscale()
ax1.set_title('Current')

# Doesn't seem to do anything
for l in ax1.lines:
    l.set_marker('o')

ax2 = fig.add_subplot(1, 2, 2)
ax2.plot([0, 1], [1, 1], 'ro-')
ax2.plot([2, 3], [3, 3], 'go-')
ax2.plot([1, 1], [2, 3], 'bo-')
ax2.set_title('Goal')

plt.show()

1 răspunsuri
tmdavison

Nu cred că puteți adăuga markeri la un LineCollection. Cu toate acestea, folosind ax.scatter pentru a trasa markerii pe partea de sus a LineCollection ar fi probabil mai rapid decât să folosiți ax.plot

De exemplu, ceva de genul:

import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

lines = [[(0, 1), (1, 1)], [(2, 3), (3, 3)], [(1, 2), (1, 3)]]
colors = ['r', 'g', 'b']

lc = LineCollection(lines, colors=['r', 'g', 'b'])
fig = plt.figure()

ax1 = fig.add_subplot(1, 1, 1)
ax1.add_collection(lc)
ax1.autoscale()

x = [i[0] for j in lines for i in j]
y = [i[1] for j in lines for i in j]
c = [col for col in colors for _ in (0, 1)]

ax1.scatter(x, y, c=c)

plt.show()