Matplotlib子图中轨迹自动颜色分配顺序咨询
Matplotlib自动分配轨迹颜色的顺序详解
嘿,这个问题我之前做批量可视化的时候也琢磨过,刚好能给你说清楚细节~
核心逻辑:Axes的独立颜色循环
Matplotlib给每条plot轨迹分配颜色,是基于当前子图(也就是你的axarr[0,0]这类Axes对象)的颜色循环器来的。这里有个关键细节:
- 同一个子图里,每调用一次
plot(),就会按循环顺序取下一个颜色 - 不同子图的颜色循环是完全独立的,每个子图的第一条轨迹都会从循环的第一个颜色开始
默认颜色循环的具体顺序
默认情况下,Matplotlib 3.x+的颜色循环来自rcParams['axes.prop_cycle'],按顺序的10种基础颜色是:
#1f77b4(深蓝色)#ff7f0e(橙色)#2ca02c(草绿色)#d62728(砖红色)#9467bd(紫灰色)#8c564b(棕褐色)#e377c2(浅粉色)#7f7f7f(中灰色)#bcbd22(黄绿色)#17becf(青蓝色)
如果子图里的轨迹超过10条,循环器会从头重复,第11条回到深蓝色,第12条再用橙色,以此类推。
对应你例子的颜色分配
就拿你说的4条轨迹的子图来说:
axarr[0, 0].plot(data for trace 1)→ 分配第1个颜色:深蓝色#1f77b4axarr[0, 0].plot(data for trace 2)→ 分配第2个颜色:橙色#ff7f0eaxarr[0, 0].plot(data for trace 3)→ 分配第3个颜色:草绿色#2ca02caxarr[0, 0].plot(data for trace 4)→ 分配第4个颜色:砖红色#d62728
如何查看/自定义颜色循环
如果你想确认当前的颜色顺序,或者自己定义循环规则,可以用这段代码:
import matplotlib.pyplot as plt # 查看当前默认的颜色循环列表 default_colors = plt.rcParams['axes.prop_cycle'].by_key()['color'] print("当前默认颜色顺序:", default_colors) # 给单个子图设置自定义颜色循环 custom_color_cycle = plt.cycler(color=["#ff3333", "#33ff33", "#3333ff", "#ffff33"]) axarr[0,0].set_prop_cycle(custom_color_cycle)
小提醒
如果你用了seaborn这类第三方可视化样式,默认的颜色循环会被修改,这时需要查看对应样式的prop_cycle配置来确认颜色顺序。
内容的提问来源于stack exchange,提问作者user9195810
相关产品推荐
相关产品推荐

