Wenn Sie verschiedenen Marker für verschiedene Gruppen von Daten (die Farben automatisch durch matplotlib
gefahren werden) haben wollen:
import numpy as np
import matplotlib.pyplot as plt
markers = ['o', #'circle',
'v', #'triangle_down',
'^', #'triangle_up',
'<', #'triangle_left',
'>', #'triangle_right',
'1', #'tri_down',
'2', #'tri_up',
'3', #'tri_left',
'4', #'tri_right',
'8', #'octagon',
's', #'square',
'p', #'pentagon',
'h', #'hexagon1',
'H', #'hexagon2',
'D', #'diamond',
'd', #'thin_diamond'
]
n_markers = len(markers)
a = [10.*np.random.random(int(np.random.random()*10)) for i in xrange(n_markers)]
fig = plt.figure()
ax = fig.add_subplot(111)
for i, data in enumerate(a):
xs = data.shape[0]*[i,] # makes the abscissas list
marker = markers[i % n_markers] # picks a valid marker
ax.plot(xs, data, marker, label='data %d, %s'%(i, marker))
ax.set_xlim(-1, 1.4*len(a))
ax.set_ylim(0, 10)
ax.legend(loc=None)
fig.tight_layout()
Beachten Sie die Grenzen y
Skala sind hart codiert, ändern Sie entsprechend. Die 1.4*len(a)
soll Platz auf der rechten Seite des Graphen für die Legende lassen.
Das Beispiel hat über keinen Punkt in der x=0
(würde dunkelblaue Kreise sein), wie die zufällig zugewiesen Größe für seine Datensatz Null war, aber man kann leicht ein +1
platzieren, wenn Sie nicht x=0
verwenden möchten.
Nicht wirklich. Ich brauche die letzten zwei Elemente, 48 und 55, die in demselben Fall mit der gleichen Abzisse verbunden sind (das gleiche x). –
Wenn Sie eine einzelne Zeile plotten möchten, habe ich den obigen Code geändert. Nicht ganz sicher, was Sie versuchen zu plotten, aber das obige wird tun –
Das funktioniert, aber um 'xs = [1, 2, 4, 4]' wie angefordert zu bekommen, müssen Sie '[[i + 1] * len (x1) für i, x1 in enumerate (x)] '. (Derzeit gibt es '[0, 1, 3, 3]') – tom