У меня есть сюжет с 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()
Проблема в том, что я получаю легенду, которая выбирает только первый символ каждого члена списка, пожалуйста, см. Прилагаемую фигуру. Что не так с моим кодом???? это такая простая вещь! Большое спасибо! любая помощь будет оценена!
Использование:
plt.plot(ys, zs,'o', c=color[k], label=mylegend[k], markersize=10)
plt.legend(loc=2)
альтернативно, решение, уже указанное Крисом Редфордом, также работает:
plt.legend((mylegend[k],), loc=2)
Я уверен, что он обрабатывает код (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)