Уникальный график участка для каждого участка в matplotlib
У меня есть цикл, где я создаю некоторые графики, и мне нужен уникальный маркер для каждого сюжета. Я думаю о создании функции, которая возвращает случайный символ, и использовать его в моей программе таким образом:
for i in xrange(len(y)):
plt.plot(x, y [i], randomMarker())
но я думаю, что этот способ не является хорошим.
Мне нужно это просто, чтобы отличить графики от легенды, потому что графики не должны быть связаны с линиями, они должны быть просто наборами точек.
Ответы
Ответ 1
itertools.cycle
будет перебирать список или кортеж неограниченно. Это предпочтительнее функции, которая случайно выбирает маркеры для вас.
import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*'))
for n in y:
plt.plot(x,n, marker = marker.next(), linestyle='')
Вы можете использовать это для создания графика следующим образом:
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()
![Example plot]()
Ответ 2
Вы также можете использовать генерацию маркеров по кортежу, например. как
import matplotlib.pyplot as plt
markers = [(2+i/2, 1+i%2, 0) for i in range(16)]
[plt.plot(i, 0, marker = markers[i], ms=10) for i in range(16)]
Подробнее см. сайт doc-сайта маркеров Matplotlib.
Кроме того, это можно комбинировать с циклом itertools.cycle, упомянутым выше
Ответ 3
Просто создайте массив, содержащий символы маркера, и используйте его, например:
markers=[',', '+', '-', '.', 'o', '*']