Многоцветный маркер с матплотлибом - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь построить простую диаграмму с маркерами в виде «x» (зеленый цвет), если точка данных четная, и «o» (красный цвет), если точка данных нечетная. Однако график отображается со всеми маркерами как «o», кроме последнего, который правильно отображается как «x». Руководство Pls.

import matplotlib.pyplot as plt

a = []
b = []

for i in range( 1, 11 ):
    a.append( i )
    b.append( i )
    if ( i % 2 ) == 0:
            plt.plot( a, b, "gx" )
    else:
            plt.plot( a, b, "ro" )

plt.show()

1 Ответ

1 голос
/ 27 мая 2019

Если вы посмотрите внимательно, первые маркеры - это не красные буквы «о», а красные кружки с зеленым «х» внутри.Созданный вами цикл for эквивалентен:

plt.plot([1], [1], "ro")
plt.plot([1, 2], [1, 2], "gx")
plt.plot([1, 2, 3], [1, 2, 3], "ro")
(...)

Как следствие, вы будете строить 10 различных графиков (технически lines.Lines2D objects).Последний объект, который вы вычерчиваете, для i = 10, это "gx";он заканчивается поверх остальных.

Вот исправленная версия вашего алгоритма (сделайте один график на точку):

# Not a good way to go about it
import matplotlib.pyplot as plt

# Loop, one plot per iteration
for i in range(1,11):
    if i % 2 == 0:
        plt.plot(i, i, "gx")
    else:
        plt.plot(i, i, "ro")

plt.show()

Вот лучший алгоритм:

# use this one instead
import matplotlib.pyplot as plt

# Generate a, b outside the body of the loop
a = list(range(1,11))
b = list(range(1,11))

# Make one plot per condition branch
# See also /474746/ponimanie-oboznacheniya-sreza
plt.plot(a[0::2], b[0::2], "gx")
plt.plot(a[1::2], b[1::2], "ro")

plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...