You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib无法循环遍历十六进制颜色列表问题求助

解决Matplotlib自定义颜色未生效的误解问题

我仔细看了你的代码和问题描述,发现了两个关键点:

核心误解:你的自定义颜色列表就是Matplotlib默认颜色

你定义的COLORS数组其实和Matplotlib默认的tab10颜色循环完全一致!所以即使你的循环逻辑是正确的,绘制出来的颜色和默认样式没有区别,这才让你误以为自定义颜色没生效。

你可以立刻测试验证:把COLORS里的某几个值改成完全不同的颜色,比如:

COLORS=['#ff0000' , '#00ff00' , '#0000ff' , '#d62728' , '#9467bd' , '#8c564b' , '#e377c2' , '#7f7f7f' , '#bcbd22' , '#17becf']

再运行代码,就能看到折线变成你自定义的红、绿、蓝配色了。

循环逻辑的优化建议

虽然你的循环逻辑本身没有错误,但可以写得更直观、更健壮:

  • 避免用索引i来取颜色,直接把要绘制的列和对应的颜色切片配对
  • 变量名不要和plot函数的color参数同名,避免混淆
  • 去掉from pylab import *,这种导入方式会污染全局命名空间,Matplotlib官方更推荐使用import matplotlib.pyplot as plt的标准写法

修正后的代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import os, sys

# 修改后的自定义颜色(替换了前三个颜色,方便测试)
COLORS=['#ff0000' , '#00ff00' , '#0000ff' , '#d62728' , '#9467bd' , '#8c564b' , '#e377c2' , '#7f7f7f' , '#bcbd22' , '#17becf']

fig = plt.figure(figsize=(6.29921,4), dpi=150)
ax = fig.add_subplot(111)

# 生成测试数据
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
Column_names = list(df.columns)
print(Column_names)

# 直接配对列和对应的颜色,无需手动维护索引
for col, custom_color in zip(Column_names[1:], COLORS[1:len(Column_names)]):
    print(custom_color)
    ax.plot(df["A"], df[col], linewidth=0.8, label=col, marker='o', markersize=2.5, color=custom_color)

ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), borderaxespad=0, frameon=False)
plt.show()

更灵活的颜色循环方案

如果后续你的列数可能超过COLORS的长度,可以用itertools.cycle来实现颜色自动循环:

from itertools import cycle

# 创建颜色循环迭代器
color_cycle = cycle(COLORS)

for col in Column_names[1:]:
    # 每次取循环中的下一个颜色
    current_color = next(color_cycle)
    ax.plot(df["A"], df[col], linewidth=0.8, label=col, marker='o', markersize=2.5, color=current_color)

这样不管你有多少列,都会循环使用你的自定义颜色列表,不用担心索引越界的问题。

内容的提问来源于stack exchange,提问作者NorrinRadd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:33:11