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);