如何按索引提取matplotlib Cycler对象内的tab20 colormap颜色ID
报错原因
matplotlib.cycler.Cycler对象原生仅支持切片作为__getitem__的入参,不支持传入单个整数索引,因此直接执行cy[0]会抛出"Can only use slices with Cycler.__getitem__"报错。
按索引提取颜色的可行方法
方法1:单独存储生成颜色的源列表(最推荐,效率最高)
你在构建cycler时本身就通过列表推导式生成了颜色数组,只需要把这个数组单独赋值给变量,后续直接按索引访问数组即可,不需要对cycler对象做额外转换:import matplotlib.pyplot as plt from matplotlib import cycler cm = plt.get_cmap('tab20') # 单独存储生成的颜色列表 color_list = [cm(1.*i/10) for i in range(10)] cy = cycler('color', color_list) # 按索引取色 first_color = color_list[0] # 获取第1个颜色(索引0) fifth_color = color_list[4] # 获取第5个颜色(索引4)方法2:将cycler对象转换为列表后索引
Cycler是可迭代对象,可以直接转为Python列表,转换后列表的每个元素是存储了color键的字典,取对应键值即可拿到目标颜色:cy_list = list(cy) first_color = cy_list[0]['color']方法3:使用单元素切片访问Cycler
利用Cycler支持切片的特性,传入索引对应的单元素切片,再提取切片结果里的颜色值即可:# 取索引为i的颜色通用写法 i = 0 target_color = list(cy[i:i+1])[0]['color']
*提示:如果你的核心需求包含频繁按索引取色,优先使用第一种方法,避免每次取色都做迭代转换,代码可读性也更高。
内容的提问来源于stack exchange,提问作者Lalu
相关产品推荐
相关产品推荐

