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

如何在Matplotlib中为不同线条设置颜色并合并多幅图表

解决方案

修改思路

  • 将核心绘图逻辑(plt.plot)保留在循环内,把图例设置、图表保存与显示的代码移到循环外部,确保所有科目折线都绘制在同一画布上。
  • 利用Matplotlib内置的颜色循环自动为每条折线分配不同颜色,也可自定义配色方案提升区分度。

修改后的代码

import matplotlib.pyplot as plt

materias = ["MAT 1","MAT 2","MAT 3","FIS 1","FIS 2","FIS 3","QUI 1","QUI 2","GEO 1","GEO 2","PORT","RED","LIT","ART","ING","HIST 1","HIST 2","FIL","SOC","EDF","BIO 1","BIO 2","BIO 3"]

# 初始化画布,可自定义大小提升可读性
plt.figure(figsize=(12, 8))

# 循环绘制所有科目折线
for materia in materias:
    plt.plot(df["PROVAS"], df[materia], label=materia)

# 配置图表元素
plt.title("各科目考试成绩趋势")
plt.xlabel("考试场次")
plt.ylabel("成绩")
# 将图例放在图表外侧,避免遮挡折线
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()  # 自动调整布局,防止图例被截断

# 保存并显示合并后的图表
plt.savefig('images/all_materias.png', bbox_inches='tight')
plt.show()

补充说明

  • 合并图表原理:原代码每次循环都调用plt.show()和plt.savefig(),会强制生成新画布。调整后所有折线都绘制在同一个初始画布上,最终一次性输出合并图表。
  • 自定义配色方案:如果需要更个性化的颜色,可使用Matplotlib的颜色映射生成配色列表,示例如下:
    # 选用tab20配色方案,包含20种区分度高的颜色
    colors = plt.cm.tab20.colors
    for idx, materia in enumerate(materias):
        # 循环使用配色,避免科目数量超过颜色数时出错
        plt.plot(df["PROVAS"], df[materia], label=materia, color=colors[idx % len(colors)])
    

内容的提问来源于stack exchange,提问作者Caio Henrique Gavazza Patriota

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:52:19