Если вы посмотрите внимательно, первые маркеры - это не красные буквы «о», а красные кружки с зеленым «х» внутри.Созданный вами цикл 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()