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

Matlab动画绘图问题:输出视频中坐标轴刻度不可见

解决Matlab中animatedline生成视频无坐标轴刻度的问题

使用Matlab的animatedline函数制作数据动画视频时,代码运行正常,但输出的视频中无法显示坐标轴刻度值,核心问题出在坐标轴字体设置过小,以及部分代码冗余。

原问题代码

clc
clear
close all
%%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

leftX=[0    -0.081205   -0.16242    -0.24363    -0.32485    -0.40606    -0.48727    -0.56849    -0.6497 -0.73091    -0.81213    -0.89334    -0.97455    -1.0558 -1.137  -1.2182 -1.2994 -1.3806 -1.4618 -1.543  -1.6243 -1.7055 -1.7867 -1.8679 -1.9491 -2.0303 -2.1115 -2.1928 -2.274  -2.3552 -2.4364 -2.5176 -2.5988 -2.68   -2.7612 -2.8425 -2.9237 -3.0049];  
leftY=[45.281   51.25   48.898  59.386  49.465  62.04   50.664  53.231  63.503  53.371  55.802  59.646  56.474  56.683  57.956  56.628  56.925  57.331  56.525  56.857  57.245  56.807  56.973  57.035  56.859  56.993  57.126  57.126  57.012  57.046  57.112  57.144  57.079  57.045  56.927  57.089  57.134  57.012];

rightX=[0.000   0.081   0.162   0.244   0.325   0.406   0.487   0.568   0.650   0.731   0.812   0.893   0.975   1.056   1.137   1.218   1.299   1.381   1.462   1.543   1.624   1.706   1.787   1.868   1.949   2.030   2.112   2.193   2.274   2.355   2.436   2.518   2.599   2.680   2.761   2.843   2.924   3.005];
rightY=[45.281  51.212  48.869  59.459  49.138  62.068  50.844  52.928  63.230  53.481  55.907  59.519  56.434  56.849  57.779  56.599  57.046  57.256  56.714  56.974  56.936  56.936  57.113  56.924  56.941  56.908  57.044  56.847  56.952  57.008  56.947  57.041  57.038  56.910  56.858  57.093  57.034  56.928];

%animate function
h=animatedline('Color','r','LineWidth',2.5);
axis([-2.0 2.0 40 70]);

h2=animatedline('LineWidth',2.5);
box on
set(gca, 'FontSize', 1.20, 'LineWidth', 1.2);
ylabel(' O^{2-}ion density(ion/{nm}^3)', 'FontSize', 20);
xlabel('Distance from GB core(nm)', 'FontSize', 20);

frames= cell(length(leftX)+20,1)

%define forloop

for i=1:length(leftX)
    addpoints(h,leftX(i),leftY(i));
    addpoints(h2,rightX(i),rightY(i))
    
       drawnow; pause(1.3)
       frame(i)=getframe(gcf);
end 

obj =VideoWriter('oscillations.avi');
obj.Quality=100;
obj.FrameRate =1;
open(obj);
for i=1:length(leftX)
    writeVideo(obj,frame(i));

end
obj.close()

问题分析

  1. 坐标轴字体过小:代码中set(gca, 'FontSize', 1.20)将坐标轴刻度字体设置为1.2,这个尺寸太小,肉眼几乎无法识别,导致视频中完全看不到刻度值。
  2. 冗余变量:frames= cell(length(leftX)+20,1)定义后未被使用,属于无效代码。
  3. 未预分配数组:frame数组在循环中动态赋值,会降低运行效率。

修改后的代码

clc
clear
close all

leftX=[0    -0.081205   -0.16242    -0.24363    -0.32485    -0.40606    -0.48727    -0.56849    -0.6497 -0.73091    -0.81213    -0.89334    -0.97455    -1.0558 -1.137  -1.2182 -1.2994 -1.3806 -1.4618 -1.543  -1.6243 -1.7055 -1.7867 -1.8679 -1.9491 -2.0303 -2.1115 -2.1928 -2.274  -2.3552 -2.4364 -2.5176 -2.5988 -2.68   -2.7612 -2.8425 -2.9237 -3.0049];  
leftY=[45.281   51.25   48.898  59.386  49.465  62.04   50.664  53.231  63.503  53.371  55.802  59.646  56.474  56.683  57.956  56.628  56.925  57.331  56.525  56.857  57.245  56.807  56.973  57.035  56.859  56.993  57.126  57.126  57.012  57.046  57.112  57.144  57.079  57.045  56.927  57.089  57.134  57.012];

rightX=[0.000   0.081   0.162   0.244   0.325   0.406   0.487   0.568   0.650   0.731   0.812   0.893   0.975   1.056   1.137   1.218   1.299   1.381   1.462   1.543   1.624   1.706   1.787   1.868   1.949   2.030   2.112   2.193   2.274   2.355   2.436   2.518   2.599   2.680   2.761   2.843   2.924   3.005];
rightY=[45.281  51.212  48.869  59.459  49.138  62.068  50.844  52.928  63.230  53.481  55.907  59.519  56.434  56.849  57.779  56.599  57.046  57.256  56.714  56.974  56.936  56.936  57.113  56.924  56.941  56.908  57.044  56.847  56.952  57.008  56.947  57.041  57.038  56.910  56.858  57.093  57.034  56.928];

% 设置画布大小,确保刻度完整显示
figure('Position', [100 100 800 600]);

% 创建动画线条
h=animatedline('Color','r','LineWidth',2.5);
axis([-2.0 2.0 40 70]);

h2=animatedline('LineWidth',2.5);
box on
% 修正坐标轴字体大小,设置为合适的12号字
set(gca, 'FontSize', 12, 'LineWidth', 1.2);
ylabel(' O^{2-}ion density(ion/{nm}^3)', 'FontSize', 20);
xlabel('Distance from GB core(nm)', 'FontSize', 20);

% 预分配frame数组,提升效率
frame = struct('cdata', [], 'colormap', []);
frame(length(leftX)) = frame(1);

% 动画循环
for i=1:length(leftX)
    addpoints(h,leftX(i),leftY(i));
    addpoints(h2,rightX(i),rightY(i))
    
    drawnow; 
    pause(1.3);
    frame(i)=getframe(gcf);
end 

% 写入视频
obj =VideoWriter('oscillations.avi');
obj.Quality=100;
obj.FrameRate =1;
open(obj);
writeVideo(obj,frame);
close(obj);

关键修改点说明

  • 调整坐标轴字体大小:将FontSize从1.2改为12,确保刻度文字清晰可见。
  • 预分配数组:提前初始化frame数组,避免循环中动态扩容,提升代码运行效率。
  • 设置画布尺寸:通过figure('Position', [100 100 800 600])固定画布大小,防止getframe捕获不完整的界面元素。
  • 简化视频写入循环:直接使用writeVideo(obj,frame)一次性写入所有帧,替代原有的循环写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:30:55