如何无需循环为Matplotlib多折线设置分组颜色?
问题解决:Matplotlib批量为多条折线设置不同颜色
错误原因
plt.plot()的color参数仅支持单个颜色值(让所有折线使用同一种颜色),无法直接传入颜色列表为每条折线单独指定颜色,因此传入列表会触发ValueError。
解决方案
方案1:利用轴对象的颜色循环(单次plot)
通过set_prop_cycle()设置轴的颜色循环规则,让plot时按列表顺序为每条折线分配颜色:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 180) y = np.random.rand(36, 180) # 定义颜色序列并设置轴的颜色循环 colors = ['blue'] * 30 + ['red'] * 6 plt.gca().set_prop_cycle(color=colors) # 一次绘制所有折线,自动按颜色循环上色 plt.plot(x, y.T) plt.show()
方案2:分两次plot绘制(直观易懂)
直接拆分数据,分别绘制前30条和后6条折线,各自指定颜色:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 180) y = np.random.rand(36, 180) # 绘制前30条蓝色折线 plt.plot(x, y[:30].T, color='blue') # 绘制后6条红色折线 plt.plot(x, y[30:].T, color='red') plt.show()
两种方案对比
- 方案1适合需要按自定义顺序批量设置颜色的场景,仅需一次plot调用;
- 方案2代码逻辑更直观,可读性强,无需理解颜色循环机制。
内容的提问来源于stack exchange,提问作者R Walser
相关产品推荐
相关产品推荐

