在Matlab中绘制Comsol导出的云图数据并导出为图片

  |   0 评论   |   815 浏览

直接上代码

 1% 设置绘图使用的默认字体(重启matlab后恢复原样),也可单独设置(见后续代码)
 2fntsize = 10;
 3fntname = 'Palatino Linotype';
 4fnt = {'FontSize',fntsize,'FontName',fntname};
 5set(groot,'defaultAxesFontName',fntname)
 6set(groot,'defaultAxesFontSize',fntsize)
 7set(groot,'defaultLegendFontName',fntname)
 8set(groot,'defaultLegendFontSize',fntsize)
 9set(groot,'defaultTextFontName',fntname)
10set(groot,'defaultTextFontSize',fntsize)
11set(groot,'defaultTextboxShapeFontName',fntname)
12set(groot,'defaultTextboxShapeFontSize',fntsize)
13
14% 读数据,跳过前8行(comsol导出的数据默认有8行注释)
15% 可以轻松处理百MB的文件
16dat = readmatrix('d:\data.txt', 'NumHeaderLines', 8);
17
18% comsol默认输出的数据格式为 每行 -- x y 值
19x = dat(:, 1);
20y = dat(:, 2);
21v = dat(:, 3);
22
23% 最终画图时用的x坐标和y坐标
24[xq, yq] = meshgrid(-150:.2:150, -35:.2:35);
25
26% 将comsol输出的数据插值到均匀网格
27vq = griddata(x, y, v, xq, yq);
28
29% 图片最大的大小(物理)12cm * 8cm
30fig = figure('Units', 'centimeters', 'InnerPosition', [0 0 12 8]);
31tiledlayout('flow', 'TileSpacing', 'none', 'Padding', 'tight');
32nexttile;
33
34% 移动到屏幕中间
35movegui(fig, 'center')
36
37% 绘制(pcolor的性能要优于surface,因为是纯二维图)
38s = pcolor(xq, yq, vq);
39% 去除默认绘制的网格,并使颜色平滑
40s.EdgeColor = 'none';
41s.FaceColor = 'interp';
42
43% 颜色映射
44colormap(wave());
45
46% y轴范围
47ylim([-35 35]);
48
49% 使坐标轴的比例为1:1
50daspect([1 1 1]);
51
52% 轴标签
53xlabel('x/mm', fnt{:});
54
55% 使色彩轴对称
56cbmaxval = max(abs(vq), [], "all");
57caxis(cbmaxval * [-1 1]);
58
59% 绘制色卡
60cb = colorbar;
61cb.Label.String = 'A / Pa';
62cb.Label.FontName = fntname;
63cb.Label.FontSize = fntsize;
64% 注意:matlab默认生成的负号不是标准的负号,有些期刊会介意,可以使用这个修复
65cb.TickLabels = strrep(cb.TickLabels,'-',char(8722));
66
67% 调节坐标轴的字体
68ax = gca;
69ax.FontName = fntname;
70ax.FontSize = fntsize;
71
72% 导出图片
73exportgraphics(fig, 'file.png', 'Resolution', 600);

常用的comsol颜色映射(如文中的wave)可以到这里下载


标题:在Matlab中绘制Comsol导出的云图数据并导出为图片
作者:joyqat
地址:https://joyqat.top/articles/2022/09/20/1663665453944.html

评论

发表评论


取消