如何Pythonic生成交替/分组重复RGBA序列供matplotlib柱状图配色
报错原因
你代码运行报错是因为生成的dtype=object的numpy数组结构不符合matplotlib的RGBA参数格式要求。实际使用时不需要强制转换为numpy数组,直接使用Python原生列表即可完美适配ax.bar的color参数。
两种排列规则的简洁实现
首先定义公共变量:
# 两个基础RGBA颜色 color1 = (0.04, 0.015, 0.02, 1.0) color2 = (0.8, 0.5, 0.2, 1.0) N = 32 # 颜色列表总长度,可按需修改
1. 交替排列(0,1,0,1...)
方案1:列表推导式
colorlist = [color1 if i%2 == 0 else color2 for i in range(N)]
方案2:itertools循环(更简洁)
from itertools import cycle, islice colorlist = list(islice(cycle([color1, color2]), N))
2. 固定连续次数切换(如连续k个同色后切换)
假设单颜色连续出现次数为k:
k = 3 # 可按需修改连续次数
方案1:列表推导式
colorlist = [color1 if (i//k) % 2 == 0 else color2 for i in range(N)]
方案2:itertools循环(更简洁)
from itertools import cycle, islice colorlist = list(islice(cycle([color1]*k + [color2]*k), N))
修正后可直接运行的测试代码
import numpy as np import matplotlib.pyplot as plt from itertools import cycle, islice color1 = (0.04, 0.015, 0.02, 1.0) color2 = (0.8, 0.5, 0.2, 1.0) N = 32 # 生成交替排列颜色列表,如需连续模式替换为对应生成代码即可 colorlist = list(islice(cycle([color1, color2]), N)) fig, ax = plt.subplots() y = np.ones(N) x = np.arange(N) ax.bar(x, y, color=colorlist) plt.show()
内容的提问来源于stack exchange,提问作者ShaunH
相关产品推荐
相关产品推荐

