легенда внутри цикла в подзаговоре в Matplotlib: что не так с моим кодом? - PullRequest
1 голос
/ 25 августа 2011

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

matrixSol = scipy.random.random((6,6,4))
print matrixSol
mylegend = ['10 Million','15 Million','1 Million','20 Million','25 Million','5 Million']

for k in range(6):
    print k
    xs = matrixSol[k,:,0]
    ys = matrixSol[k,:,1]
    zs = matrixSol[k,:,3]
    plt.subplot(2,3,k+1)
    plt.plot(ys, zs,'o', c=color[k], markersize=10)#marker = styles[k])
    #print mylegend[k]
    plt.legend((mylegend[k]),loc=2)
    plt.xlabel('X')
    plt.ylabel('Y (%)')
plt.show()

Проблема в том, что я получаю легенду, которая выбирает только первый символ каждого члена списка, пожалуйста, смотрите прилагаемый рисунок. Что не так с моим кодом ???? это такая простая вещь! Большое спасибо! любая помощь будет оценена! enter image description here

Ответы [ 2 ]

5 голосов
/ 25 августа 2011

Использование:

plt.plot(ys, zs,'o', c=color[k], label=mylegend[k], markersize=10)
plt.legend(loc=2)

enter image description here

альтернативно, решение, уже указанное Крисом Редфордом, также работает:

plt.legend((mylegend[k],), loc=2)
2 голосов
/ 25 августа 2011

Я почти уверен, что он обрабатывает код (mylegend[k]) в строке:

plt.legend((mylegend[k]),loc=2)

Как будто строка (например, '10 Million') сама является списком (например, ['1', '0', ' ', 'M', 'i', 'l', 'l', 'i', 'o', 'n']).

Если вы измените эту строку на (mylegend[k],) (запятая, чтобы указать, что это кортеж), она может работать правильно:

plt.legend((mylegend[k],),loc=2)
...