Is er een lijst met lijnstijlen in Matplotlib?

Ik schrijf een script dat wat plotten. Ik wil dat het verschillende data-serie plot, elk met zijn unieke lijnstijl (niet kleur). Ik kan gemakkelijk door een lijst herhalen, maar is er zo’n lijst al beschikbaar in Python?


Antwoord 1, Autoriteit 100%

volgens de DOC kunt u ze vinden door te doen Dit:

from matplotlib import lines
lines.lineStyles.keys()
>>> ['', ' ', 'None', '--', '-.', '-', ':']

U kunt hetzelfde doen met markers

EDIT: in de laatste versies , er zijn nog steeds hetzelfde stijlen, maar je kunt de ruimte tussen stippen / lijnen variëren.


Antwoord 2, Autoriteit 42%

plotDocumentatie

http://matplotlib.org/1.5.3/ API / PYPLOT_API.HTML # MATPLOTLIB.PYPLOT.PLOT heeft een lijst met lijn + markeerstijlen:

character description
'-'       solid line style
'--'      dashed line style
'-.'      dash-dot line style
':'       dotted line style
'.'       point marker
','       pixel marker
'o'       circle marker
'v'       triangle_down marker
'^'       triangle_up marker
'<'       triangle_left marker
'>'       triangle_right marker
'1'       tri_down marker
'2'       tri_up marker
'3'       tri_left marker
'4'       tri_right marker
's'       square marker
'p'       pentagon marker
'*'       star marker
'h'       hexagon1 marker
'H'       hexagon2 marker
'+'       plus marker
'x'       x marker
'D'       diamond marker
'd'       thin_diamond marker
'|'       vline marker
'_'       hline marker

Aangezien dit onderdeel is van de pyplot.plotdocstring, kun je het ook vanaf de terminal zien met:

import matplotlib.pyplot as plt
help(plt.plot)

Antwoord 3, autoriteit 8%

Uit mijn ervaring is het prettig om de kleuren en markeringen in een lijst te hebben, zodat ik ze tijdens het plotten kan doorlopen.

Hier is hoe ik de lijst met dergelijke dingen verkrijg. Het kostte wat graafwerk.

import matplotlib
colors_array = matplotlib.colors.cnames.keys()
markers_array = matplotlib.markers.MarkerStyle.markers.keys()

Antwoord 4, autoriteit 5%

Je kunt het woordenboek kopiëren van het voorbeeld van Linestyle:

from collections import OrderedDict
linestyles = OrderedDict(
    [('solid',               (0, ())),
     ('loosely dotted',      (0, (1, 10))),
     ('dotted',              (0, (1, 5))),
     ('densely dotted',      (0, (1, 1))),
     ('loosely dashed',      (0, (5, 10))),
     ('dashed',              (0, (5, 5))),
     ('densely dashed',      (0, (5, 1))),
     ('loosely dashdotted',  (0, (3, 10, 1, 10))),
     ('dashdotted',          (0, (3, 5, 1, 5))),
     ('densely dashdotted',  (0, (3, 1, 1, 1))),
     ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
     ('dashdotdotted',         (0, (3, 5, 1, 5, 1, 5))),
     ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))])

Je kunt dan de lijnstijlen herhalen

fig, ax = plt.subplots()
X, Y = np.linspace(0, 100, 10), np.zeros(10)
for i, (name, linestyle) in enumerate(linestyles.items()):
    ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black')
ax.set_ylim(-0.5, len(linestyles)-0.5)
plt.show()

Of je haalt er gewoon een enkele lijnstijl uit,

ax.plot([0,100], [0,1], linestyle=linestyles['loosely dashdotdotted'])

Antwoord 5, autoriteit 3%

In python3 retourneert de .keys()methode een dict_keysobject en niet een list.
Je moet de resultaten doorgeven aan list()om de array te kunnen indexeren zoals je zou kunnen in python2. bijv. deze SO-vraag

Dus om itereerbare arrays voor lijnen, kleuren en markeringen te maken, kun je zoiets gebruiken.

import matplotlib
colors_array = list(matplotlib.colors.cnames.keys())
lines_array = list(matplotlib.lines.lineStyles.keys())
markers_array = list(matplotlib.markers.MarkerStyle.markers.keys())

Antwoord 6

Ik geef niet direct antwoord op de vraag om toegang te krijgen tot een lijst, maar het is handig om nog een alternatief op deze pagina te hebben: er is een extra manier om gestippelde lijnstijlen te genereren.

U kunt lijnen tussen A en B genereren met transversale strepen zoals

A ||||||||||||||||||||||||||||||||||||||||||||| | B

A || || || || || || || || || || || || || || || || B

Een | | | | | | | | | | | | | | | | | | | | | | | | B

door de breedte van uw lijn te vergroten eneen aangepast streepjespatroon op te geven:

ax.plot(x, y, dashes=[30, 5, 10, 5])

De documentatie voor matplotlib.lines.Line2Dzegt ditover set_dashes(seq):

Stel de streepjesvolgorde in, de reeks streepjes met aan uit-inkt in punten. Als seq leeg is of als seq = (Geen, Geen), wordt de lijnstijl ingesteld op vast.

ACCEPTEN: volgorde van aan/uit inkt in punten

Ik denk dat het beter gezegd had kunnen worden: terwijl het de lijn schildert, geeft de reeks getallen aan hoeveel punten er langs de lijn zijn geschilderd, hoeveel punten er dan worden weggelaten (in het geval er twee cijfers zijn), hoeveel zijn geschilderd, hoeveel zijn er ongeverfd (in het geval van vier nummers in de reeks). Met vier getallen kunt u een streepjeslijn genereren: [30, 5, 3, 5] geeft een streepje van 30 punten, een tussenruimte van 5 punten, een streepje van 3 punten (een punt) en een 5 -punt kloof. Dan herhaalt het zich.

Deze pagina van de documentatielegt deze mogelijkheid uit. Kijk hiervoor twee verschillende manieren om dit te doen.

Other episodes