matlab如何将画好的图批量保存,Matlab批量绘制图像并保存

author:ZKe

-------------------------------

以下是一个txt文件,每行11个字段,第一个字段是日期,后面10个是用户id和对应今天发表微博数,所有字段用制表符'\t'分隔

63efc23d9e57e540888a4d53d9a8030b.png

我们要对每一行数据,画一个柱状图,标题是日期,x轴是用户id,纵轴是发表微博数

而且是批量的,写一个Matlab脚本,绘制并保存每个图

1. 首先要处理每一行数据,进行字符串切割,假设str是我们读取的一行数据

parts = strsplit(str, '\t'); % 字符串切割,返回元胞数组

name = parts(1); % 第一个字段是日期

data = zeros(1,10);

labels = cell(1,10); % 横坐标标记

subParts = cell(1,2);

for i=1:length(parts)-1

subParts = strsplit(parts{i+1}, ':'); % 对每一个id-count字段再切割

data(i) = str2double(subParts{2}); % 字符串转换为数值

labels{i} = subParts{1}; % {}访问元胞数组,和原类型一样是字符串

end

2. 然后通过所得数据绘制图形

fg = figure() % fg是可以保存的绘图句柄

axes1 = axes('Parent',fg); % 通过axes修改横坐标标记

bar(data, 'FaceColor',[0.73 0.83 0.96])

% 为柱状图添加数值标记

for i=1:10

text(i-0.1, data(i)+1.2, num2str(data(i)));

end

set(axes1,'XTickLabel',labels); % 横坐标标记修改为用户ID

xlabel('用户ID')

ylabel('今日发微博数')

% 年月日字符串作为标题

datePart = strsplit(name{1},'/');

dateStr = strcat(datePart{1},'年',datePart{2},'月',datePart{3},'日')

titleName = strcat(dateStr, ' 的发微博数Top10');

title(titleName)

3. 保存图像

saveas(fg, strcat('发微博数Top10/',titleName, '.jpg'));

close(fg) % 当前图像绘制完之后关闭当前图像,否则下一个循环再打开一个画布,批量很多张的话屏幕可能会崩

一张就是绘制一张图像的过程,要批量进行就要按行读取文件

在以上代码的上下添加如下代码即可:

str = '';

fid = fopen('srcdata.txt');  % 打开一个文件

index = 0;

while ~feof(fid)

str = fgetl(fid);  % 逐行读取

% 上述代码

end

效果如下!堪称Perfect!^_^ ~

不过这样其实还有一个缺陷,我忘记统一纵坐标范围了,可以用ylim()函数固定坐标范围,这样所有图像放一起就能比较差异了

e101bfa99bfcb0a475f7ffcdc66abd0d.png

来源:https://www.cnblogs.com/zhaoke271828/p/13212383.html

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值