Проблема с созданием цикла for на диаграмме рассеяния - PullRequest
1 голос
/ 13 октября 2019

Ниже приведен мой код для точечной диаграммы. Проблема, с которой я столкнулся, заключается в том, что легенда отображает:

синюю точку с буквой М рядом с ней, а затем под ней отображается оранжевая точка с буквой i рядом с ней. Это не то, что я хотел. Я хотел, чтобы он отображал синюю точку с Microcar 0, а затем под ней отображал оранжевую точку с Microcar 1 рядом с ней.

Должно быть, что-то не так с:

plt.legend('Microcar'+ stri(i)) 

частью моего кода, но я не знаю что?

import matplotlib.pyplot as plt
import numpy as np

horizontal_expected =[28.96, 165.03]
vertical_expected = [196.14,-3.34]

for i in list(range(len(vertical_expected))):
    y = vertical_expected[i]
    x = horizontal_expected[i]
    plt.scatter(x,y)
    plt.legend('Microcar' + str(i))


plt.show()

Ответы [ 2 ]

3 голосов
/ 13 октября 2019

В вашем методе есть две ошибки:

  1. Каждый раз, когда plt.legend('Microcar'+ stri(i)) строка запускается, она перезаписывает легенду.
  2. Метод plt.legendожидает аргумент labels, который является итеративным, и назначает каждый член labels, в свою очередь, компонентам графа. Поскольку строка является итеративной, она присваивает каждый символ строки каждому компоненту графа.

Принятое решение работает, но более читаемый способ сделать это - пометить каквы идете.

import matplotlib.pyplot as plt
import numpy as np

horizontal_expected =[28.96, 165.03]
vertical_expected = [196.14,-3.34]

for i, (x, y) in enumerate(zip(horizontal_expected, vertical_expected)):
    plt.scatter(x, y, label='Microcar ' + str(i))

plt.legend()

plt.show()
2 голосов
/ 13 октября 2019

В вашем случае, когда вы передаете строку ('Microcar') в качестве аргумента методу plt.legend (), происходит то, что первый символ 'M' становится первой легендой, а второй символ 'i' становитсявторая легенда

Разрешение

Вы должны передать легенды в виде списка строк. Как в следующем примере.

import matplotlib.pyplot as plt
import numpy as np

horizontal_expected =[28.96, 165.03]
vertical_expected = [196.14,-3.34]
legends=[]
for i in list(range(len(vertical_expected))):
    y = vertical_expected[i]
    x = horizontal_expected[i]
    plt.scatter(x,y)
    legends.append(['Microcar' + str(i)])    

plt.legend(legends)
plt.show()

Это даст ожидаемый результат

Надеюсь, это поможет ....

...