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

使用matplotlib.animation与LineCollection时,如何缩减colors列表体积?

解决Matplotlib动画中颜色列表内存占用过高的方案

1. 整数映射颜色字符串

用整数代替重复的颜色字符串,通过字典映射还原。这种方法内存占用极低,且实时添加数据时无需解压操作:

  • 定义颜色映射字典:color_map = {0: 'blue', 1: 'green', 2: 'red'}
  • 将原颜色列表['blue','blue',...,'green','green']替换为整数列表[0,0,...,1,1]
  • 绘制时直接通过索引取颜色:color = color_map[color_index]
  • 新增数据时,直接添加对应颜色的整数即可,无需处理字符串重复存储

2. 用Numpy数组存储整数索引

如果数据量极大,用Numpy的低精度整数数组进一步压缩内存:

  • 导入Numpy并创建数组:
import numpy as np
# 用uint8类型(0-255)足够存储最多256种颜色
color_indices = np.array([0,0,1,1,2,2], dtype=np.uint8)
  • 这种方式每个元素仅占1字节,远低于字符串的内存开销,且Numpy数组的读写效率更高
  • 新增数据时,直接用np.append或预分配数组扩展,绘制时同样通过字典映射颜色

3. 按连续颜色段存储

如果颜色是连续重复的(比如连续N条蓝色线段,再M条绿色线段),可以用"计数+颜色"的元组列表存储:

  • 原列表['blue']*1000 + ['green']*500可简化为[(1000, 'blue'), (500, 'green')]
  • 新增数据时:
    • 检查最后一段的颜色是否与新颜色相同,相同则更新计数(比如最后一段是(1000, 'blue'),新增50条蓝色线段,就改成(1050, 'blue'))
    • 不同则添加新的元组(比如新增红色线段,就追加(30, 'red'))
  • 绘制时,仅需要处理新增的线段部分,无需展开整个列表,既省内存又减少计算量

内容的提问来源于stack exchange,提问作者THATS MY QUANT MY QUANTITATIVE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:10:02