遍历列表中的元素以指定不同的颜色以进行绘图

时间:2013-10-14 02:30:05

标签: python list matplotlib

我有一个由N子列表组成的主列表(此编号将针对不同的运行进行更改),每个列表包含x,y个点对。我需要一种方法来绘制这些子列表中具有不同颜色的点,从列表中获取(通常)比子列表更少的元素。要做到这一点,我需要一种通过这个颜色列表循环的方法。这是我所追求的内容的摘录:

# Main list which holds all my N sub-lists.
list_a = [[x,y pairs], [..], [..], [..], ..., [..]]

# Plot sub-lists with colors taken from this list. I need the for block below
# to cycle through this list.
col = ['red', 'darkgreen', 'blue', 'maroon','red']

for i, sub_list in enumerate(list_a):
    plt.scatter(sub_list[0], sub_list[1], marker='o', c=col[i])

如果len(col) < len(list_a)(这将在大多数时间发生),这将返回错误。因为对于给定的代码运行,子列表的数量会有所不同,我无法将多种颜色硬编码到col列表中,所以我需要一种方法来循环通过那个颜色列表。我怎么能这样做?

2 个答案:

答案 0 :(得分:7)

IIUC,您可以使用itertools.cycle,然后使用c=col[i]代替next。例如:

>>> from itertools import cycle
>>> cols = cycle(["red", "green", "blue"])
>>> next(cols)
'red'
>>> next(cols)
'green'
>>> next(cols)
'blue'
>>> next(cols)
'red'

答案 1 :(得分:4)

您可以使用模运算符

numberOfColors = len(col)
for i, sub_list in enumerate(list_a):
    plt.scatter(sub_list[0], sub_list[1], marker='o', c=col[i % numberOfColors])