先看效果✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
主程序:
加载数据的部分我省略了,就是data1这个矩阵
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18close all; X=1:25; set(gcf,'unit','normalized','position',[0.3,0.25,0.5,0.5]); %figure窗口位置、大小设置 ylabel('人数') xlabel('日期') title('2022年11月重庆新冠疫情数据') grid minor xticks(1:3:25) xticklabels(data1(1:3:end,1)) Dynamic_plot(X',data1(:,2),0.2,{'#9933FA','-.','p'}) text(13,500,'当日新增确诊','Color','#9933FA','FontSize',10) Dynamic_plot(X',data1(:,3),0.2,{'r','-','o'}) text(15,3000,'当日新增无症状','Color','red','FontSize',10) Dynamic_plot(X',data1(:,4),0.2,{'b',':','*'}) text(15,6000,'当日新增总数','Color','blue','FontSize',10) % legend({'新增确诊','新增无症状','新增总数'},'Location','northwest') text(1:3:25,data1(1:3:end,4)+300,num2str(data1(1:3:end,4)),'Color','red','FontSize',10)
动态绘图函数:
这里暂时只支持设置线性、颜色、markerstyle这三个参数吧,主要是用line()
这个函数把点连起来,设置line的参数就是曲线的样式,查看帮助文档doc line
可以自定义设置其他样式。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63function F = Dynamic_plot(X,Y,dt,Style) %% F = Dynamic_plot(X,Y,dt,Style) 动画曲线,可用于数据回放 % X 曲线横坐标,n维列向量,或与Y通维的矩阵 % Y 曲线纵坐标,可为n维列向量或n*k矩阵(k条曲线) % dt 两相邻数据点之间的时间间隔,单位为秒 % dt影响数据回放的快慢,默认值为0.05s % Style为曲线样式,这里不完美,有时间改一改(粗细什么的没有设置),如{'r','-','o'} % 返回值F为动画的框架frame文件,可用于生成gif图片 hf = gcf; hold on % 给出时间间隔的默认值 if nargin == 2 || isempty(dt) % nargin: 输入参数的数目 dt = 0.05; end n = length(Y(:,1)); m = length(Y(1,:)); if isvector(X) % 如果X是向量,则将其扩展为与Y同维的矩阵 X = repmat( X,1,m ); end if nargin < 4 %默认参数,自己完善 Style = repmat({'b','-','o'},m,1); % 绘制初始点 % disp(Style) % Style end for ii = 1:m h(ii) = plot(X(1,ii),Y(1,ii),Style{ii,3}); % 绘制初始点 end X_1 = X(1,:); Y_1 = Y(1,:); dX = 0.01*( max(X) - min(X) ); Ymax = max( Y(:) ); Ymin = min( Y(:) ); Xmax = max( X(:) ); Xmin = min( X(:) ); dY = 0.05*( Ymax-Ymin ); dX = 0.05*( Xmax-Xmin ); axis([Xmin-dX Xmax+dX Ymin-dY Ymax+dY]); % 限制坐标轴 F(1) = getframe(hf); for ii=2:n for jj = 1:length(h) set( h(jj),'xdata',X(ii,jj),'ydata',Y(ii,jj) ); % 更新点 end line([X_1; X(ii,:)],[Y_1;Y(ii,:)],'Color',Style{1,1},'LineStyle',Style{1,2},'Marker',Style{1,3}); % 曲线连线 drawnow X_1 = X(ii,:); Y_1 = Y(ii,:); pause(dt); F(ii) = getframe(hf); end
保存gif,这里我3次调用函数画了3个曲线,要是保存的话就是3个gif;你可以一次性画3条曲线(输入Y可以是矩阵),这样就会将多条曲线保存在一条gif中,不过这种情况他们是同时绘制的。
后面有空我改改。
GIF生成函数:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37function Fun_F2gif(F,filename,S) %% Fun_F2gif(F,filename,S) 将frame格式图片框架文件转换为gif图片 % F为frame格式结构体 % S为设置参数,默认为gif动画两帧之间的间隔 % filename为文件名,默认为'Test' % S为设置参数 S为单帧时间间隔 % 默认参数 if nargin < 2 filename = 'Test.gif'; S = 0.1; elseif nargin < 3 S = 0.1; elseif nargin == 3 if isempty(filename) filename = 'Test.gif'; end end for ii = 1:length(F) if iscell(F) f = F{ii}; [I,map] = rgb2ind(f,256); else f = F(ii); I = frame2im(f); [I,map] = rgb2ind(I,256); end if ii == 1 imwrite(I,map,filename, 'Loopcount',inf,'DelayTime',S); % 首帧 else imwrite(I,map,filename, 'WriteMode','append','DelayTime',S); % 后续帧 end end
要保保存为GIF时,可以参考这样写
复制代码
1
2
3
4
5... F=Dynamic_plot(X,Y,...) ... Fun_F2gif(F,'xxx.gif',0.02)
我暂时是录屏然后使用格式工厂转换成GIF的。????????
最后
以上就是风中音响最近收集整理的关于【MATLAB】动态绘制曲线图(二维曲线)的全部内容,更多相关【MATLAB】动态绘制曲线图(二维曲线)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复