I have a loop where i create some plots and I need unique marker for each plot. I think about creating function, which returns random symbol, and use it in my program in this way:

```
for i in xrange(len(y)):
plt.plot(x, y [i], randomMarker())
```

but I think this way is not good one. I need this just to distinguish plots on legend, because plots must be not connected with lines, they must be just sets of dots.

`itertools.cycle`

will iterate over a list or tuple indefinitely. This is preferable to a function which randomly picks markers for you.

```
import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*'))
for n in y:
plt.plot(x,n, marker = marker.next(), linestyle='')
```

```
import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*'))
for n in y:
plt.plot(x,n, marker = next(marker), linestyle='')
```

You can use that to produce a plot like this (Python 2.x):

```
import numpy as np
import matplotlib.pyplot as plt
import itertools
x = np.linspace(0,2,10)
y = np.sin(x)
marker = itertools.cycle((',', '+', '.', 'o', '*'))
fig = plt.figure()
ax = fig.add_subplot(111)
for q,p in zip(x,y):
ax.plot(q,p, linestyle = '', marker=marker.next())
plt.show()
```

You can also use marker generation by tuple e.g. as

```
import matplotlib.pyplot as plt
markers = [(i,j,0) for i in range(2,10) for j in range(1, 3)]
[plt.plot(i, 0, marker = markers[i], ms=10) for i in range(16)]
```

See Matplotlib markers doc site for details.

In addition, this can be combined with itertools.cycle looping mentioned above

Licensed under: CC-BY-SA with attribution

Not affiliated with: Stack Overflow