Подтвердить что ты не робот

Уникальный график участка для каждого участка в matplotlib

У меня есть цикл, где я создаю некоторые графики, и мне нужен уникальный маркер для каждого сюжета. Я думаю о создании функции, которая возвращает случайный символ, и использовать его в моей программе таким образом:

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

но я думаю, что этот способ не является хорошим. Мне нужно это просто, чтобы отличить графики от легенды, потому что графики не должны быть связаны с линиями, они должны быть просто наборами точек.

4b9b3361

Ответ 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', '*']