легенда внутри цикла в подзаговоре в Matplotlib: что не так с моим кодом?

1

У меня есть сюжет с 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()

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

Теги:
matplotlib
legend

2 ответа

5
Лучший ответ

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

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

Изображение 174551

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

plt.legend((mylegend[k],), loc=2)
  • 0
    Большое спасибо! это работает! такое легко исправить !!!!!
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)
  • 0
    +1 Проверено. вы правы. Странный параметр ...
  • 0
    Спасибо за тестирование и возврат к +1. Я также добавил +1 за его полноту (то есть вы проверили свое решение).
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню