Matlab(不常见的绘图)

1.简介

对于一些统计量常用的频数图,三维插值图,总是容易忘,写下来备忘。

2.实现方法

1. 三维插值

1)直接导出

通常从仿真软件中导出的数据txt格式,而且按照【X,Y,Z,t1时刻温度1,t2时刻温度....】,而这样的数据直接绘图,只能绘制离散点图。

例如:

    x = data(:,1);
    y = data(:,2);
    % 温度数据
    z = data(:,4);    
    figure(1)
    scatter3(x, y, z, 'filled');

2)直接导出

能够发现的是,由于网格加密部分比较密集,很难观察细节,为此,需要形成面。需要注意的是,1.5为插值步长,有一定可能会影响精度。

例如:

% 对散点进行插值  每隔1.5mm取值
[X,Y] = meshgrid(min(x):1.5:max(x), min(y):1.5:max(y));
% 插值偏度
Z = griddata(x, y, z, X, Y);
% 平移坐标系
x = size(Z_skewness,1);
y = size(Z_skewness,2);
x = 1:x;
y = 1:y;
[X,Y] = meshgrid(x,y);
% 绘图
figure(1)
mesh(X,Y,Z)





3)为了导出沿时间方向温度的频数数据

% 插值温度(检查,是不是插值导致中心凹陷)
x = data(:,1);
y = data(:,2);
z = data(:,4:end);
% 对散点进行插值(1.5mm)
[X_new,Y_new] = meshgrid(min(x):1.5:max(x), min(y):1.5:max(y));
% 插值温度(检查,是不是插值导致中心凹陷)
for i=4:size(data,2)
	Z_temperature(:,:,i) = griddata(x, y, z(:,i), X_new, Y_new);
	disp(i)
end
% 缺陷处
defect = Z_temperature(20,30,:);
figure; % 创建一个新的图形窗口
histogram(defect); % 绘制频数图
%缺陷边缘处
free_defect = Z_temperature(115,258,:);
% 绘制频数图
figure; % 创建一个新的图形窗口
histogram(free_defect,20); % 绘制频数图
title('缺陷边缘处')

%无缺陷处
free_defect = Z_temperature(204,197,:);
% 绘制频数图
figure; % 创建一个新的图形窗口
histogram(free_defect,20); % 绘制频数图
title('无缺陷处')

10s

40s

4)黑白时序图生成彩色gif动图

%生成gif的,名称
gif = 'GIF1.gif';
t = 300
% data为三维【200,200,300】
data = load data.mat

for i=1:t
    % 提取时序图片 
    Z_skewness = data(:,:,i)
    % 归一化的图象
    img = floor(Image_Normalization(Z_skewness')*255);
    % 灰度图转颜色映射
    img = ind2rgb(img,jet(256));
    % 色彩图转索引图
    [imind,map0] = rgb2ind(img,256);                 % 将rgb图像转存为索引图象
    if i == 1
       imwrite(imind,map0,gif,'GIF', 'Loopcount',inf,'DelayTime',0.1);   % 建立第一个图像
    else
       imwrite(imind,map0,gif,'GIF','WriteMode','append','DelayTime',0.1);  % 将后续图像添加到前动图中
    end
end



function normalization_data = Image_Normalization(data)
%% 此脚本为图像的归一化函数
% 输入 
%    data:输入数据
% 输出
%    normalization_data:归一化后的数据


%% 判断矩阵是否为同一个值,若是则原样输出,若不是归一化
unique_values = unique(data);
is_same_value = numel(unique_values) == 1;

if is_same_value == 1
    normalization_data = data;
else
    rate = 1/(max(data(:))-min(data(:)));
    normalization_data = (data-min(data(:))).*rate;
end
end


生成动图: 

5)将数值图绘制为平面彩色并带图例

% Z_temperature为绘制的200*200的数据
load Z_temperature.mat
figure
imshow(Z_temperature,[])
% 设置 colorbar 的刻度和标签
ticks = linspace(min(min(Z_temperature)), max(max(Z_temperature)), 6);  % 设置刻度
tickLabels = sprintf('%.3f\n', ticks);  % 设置标签
colorbar('Ticks', ticks, 'TickLabels', tickLabels);% 'FontSize', 38
colormap jet;

6)循环生成不同的图例

% 加载循环绘图数据
load temperature_history
figure
for r=1:size(R_num,2)
    plot(10:10:80,temperature_history(r,:))
    hold on
    % 生成图例
    legend_labels{r} = num2str(R_num(r));  
end
加载图例
legend(legend_labels); 
title('温度')

 7)按指定DPI保存当前显示在figure中的图片

% 将 Figure 窗口设置为全屏
set(gcf, 'Position', screenSize); 
% 将 Figure 窗口保存为.png格式,并设置DPI为600
filename = ['figure_' num2str(i) num2str(k) '.png'];
dpi = 600;
saveas(gcf, filename, 'png', 'Resolution', dpi);

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无情滴怪蜀黍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值