具有matplotlib图的多色标记

时间:2019-05-27 05:24:08

标签: matplotlib plot

我试图绘制一个简单的图表,如果数据点为偶数,则标记为“ x”(绿色),如果数据点为奇数,则标记为“ o”(红色)。但是,除了最后一个正确显示为“ x”的标记外,所有标记均显示为“ o”的图表。请指导。

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 个答案:

答案 0 :(得分:1)

如果仔细看,第一个标记不是红色的“ o”,而是带有绿色“ x”的红色圆圈。您创建的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对象)。对于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 https://stackoverflow.com/questions/509211/understanding-slice-notation
plt.plot(a[0::2], b[0::2], "gx")
plt.plot(a[1::2], b[1::2], "ro")

plt.show()