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

如何在Matplotlib图表中同时循环颜色与线型生成唯一线条?

解决Matplotlib循环颜色与线型仅生成6种样式的问题

嘿,我来帮你揪出问题的根源!你想要用6种颜色+4种线型生成大量唯一线条,但代码只输出6种,核心原因是你用错了cycler的组合运算符。

问题出在哪?

你用了+来拼接颜色和线型的cycler,但+的作用是把两个cycler的元素按位置一一配对合并,而不是生成所有可能的颜色×线型组合。

看你写的配置代码:

plt.rc('axes', prop_cycle=(cycler('color', ['r', 'g', 'b', 'y', 'c', 'k']) + cycler('linestyle', ['-', '--', ':', '-.', '-', '--'])))

这里颜色cycler有6个元素,你为了避免报错把线型cycler也凑成了6个(重复了-和--),+会让它们一一绑定:

  • 第1条:红色+实线
  • 第2条:绿色+虚线
  • ...
  • 第6条:黑色+虚线
    从第7条开始就会重复第1条的组合,自然只有6种样式。

正确的做法

如果你想要颜色和线型的所有组合(笛卡尔积),应该用*运算符来组合cycler,它会自动生成 6种颜色 × 4种线型 = 24种 唯一的线条样式,完全覆盖你20条曲线的需求,而且不需要重复线型。

修正后的完整代码

import matplotlib.pyplot as plt
from cycler import cycler
import numpy
import seaborn

seaborn.set_style('white')
x = range(10)
ys = []
for i in range(20):
    ys.append(numpy.random.uniform(1, 10, size=10)*i)

# 用*生成颜色和线型的全组合,无需重复线型
plt.rc('axes', prop_cycle=(cycler('color', ['r', 'g', 'b', 'y', 'c', 'k']) * cycler('linestyle', ['-', '--', ':', '-.'])))

plt.figure()
for i in range(20):
    plt.plot(x, ys[i], label=i)
plt.legend(loc=(1, 0.1))
plt.show()

运行这段代码后,曲线会按「红色+实线→红色+虚线→红色+点线→红色+点划线→绿色+实线→绿色+虚线……」的顺序循环,20条曲线都能拥有唯一的线条样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:02:30