Igor中多轨迹单图影片制作的实现问题求助
Igor Pro 轨迹顺序绘制与影片生成优化方案
核心思路
针对你交替存储的TimeN/DataN格式波形,通过批量遍历配对波形+循环更新图表的方式自动生成影片,替代手动重复操作。
完整实现函数
Function MakeTraceMovie() // 1. 获取所有Time开头的波形并排序(确保Time0、Time1...顺序正确) String timeWaves = WaveList("Time*", ";", "") Variable numTraces = ItemsInList(timeWaves, ";") if (numTraces == 0) Print "未找到Time开头的波形" return -1 endif // 2. 预计算所有Data波形的统计值,用于固定Y轴范围 Variable minData = 1e30, maxData = -1e30 String dataWaveName for (variable i = 0; i < numTraces; i += 1) dataWaveName = ReplaceString(ListElement(timeWaves, i, ";"), "Time", "Data") Wave dataWave = $dataWaveName WaveStats/Q dataWave if (V_min < minData) minData = V_min if (V_max > maxData) maxData = V_max endfor // 3. 创建初始图表与临时波形(用于更新数据) // 取第一个Time/Data对初始化图表 Wave firstTime = $ListElement(timeWaves, 0, ";") Wave firstData = $ReplaceString(ListElement(timeWaves, 0, ";"), "Time", "Data") Display/N=TraceMovieGraph firstData vs firstTime Label/W=TraceMovieGraph left "Data Value" Label/W=TraceMovieGraph bottom "Time" // 固定Y轴范围(留10%余量避免边缘截断) SetAxis left minData*0.9, maxData*1.1 // 锁定轴范围防止自动缩放 ModifyGraph lockY=1, lockX=0 // X轴可随Time波形自动调整,如需固定可改为lockX=1 // 4. 初始化影片 String movieName = "TraceSequence.mov" NewMovie /F=30/L/I/O as movieName // 30帧/秒,按需调整参数 // 5. 循环遍历所有Time/Data对,生成影片帧 Wave currentTime, currentData for (variable i = 0; i < numTraces; i += 1) // 获取当前配对的Time和Data波形 currentTime = $ListElement(timeWaves, i, ";") currentData = $ReplaceString(ListElement(timeWaves, i, ";"), "Time", "Data") // 更新图表中的数据 ModifyGraph trace(0)=currentData vs currentTime DoUpdate // 强制刷新图表 // 添加当前帧到影片 AddMovieFrame endfor // 6. 清理资源 CloseMovie Killwindow TraceMovieGraph Print "影片生成完成:", movieName End
关键部分说明
- 波形配对逻辑:通过
WaveList获取所有Time*开头的波形,用ReplaceString将Time替换为Data,自动匹配对应的Data波形(需保证命名规范:Time0对应Data0,Time1对应Data1)。 - 固定轴范围:提前遍历所有Data波形计算全局最小/最大值,设置Y轴固定范围,避免影片播放时轴跳变影响观感。
- 图表更新:用
ModifyGraph trace(0)=...替换图表中的数据,配合DoUpdate强制刷新,确保每一帧内容正确。 - 影片参数:
NewMovie命令中的/F=30设置帧率为30帧/秒,可根据需求调整(如/F=10降低帧率)。
使用方法
- 确保你的波形命名符合
TimeN/DataN的规范(如Time0、Data0、Time1、Data1)。 - 在Igor的命令行中输入:
MakeTraceMovie()并回车执行。 - 生成的影片会保存在当前实验目录下,文件名为
TraceSequence.mov。
自定义调整建议
- 如果波形前缀不是
Time/Data,可修改函数中WaveList("Time*", ...)和ReplaceString("Time", "Data")的对应字符串。 - 如需固定X轴范围,将
ModifyGraph lockX=0改为lockX=1,并提前计算所有Time波形的最小/最大值设置SetAxis bottom。 - 如需添加标题或调整图表样式,可在初始图表创建后增加
ModifyGraph或Label命令。
内容的提问来源于stack exchange,提问作者Ragstock
相关产品推荐
相关产品推荐

