目录
1、matlab坐标轴设置多种字体(复合字体)
2、matlab图片中title生成的标题转移至图像下端
3、指定对应格式和期望dpi的图像进行保存、以及不留白保存
4、设置字体字号(x、y轴,标题。全局字体等)
5、设置刻度值信息,只有左、下有边框等
6、指定x、y轴刻度值
7、利用插值绘制热力图、或无插值热力图
8、自定义RGB颜色绘图
9、绘制多个组图、及相关设置。包括组图x、y轴标签、标题,以及组图色条等
10、自定义色条标签
11、颜色条反转
12、matlab figure 调整大小
13、更值得推荐的组图绘制方法(tight_subplot,可自定义间隔)
clc; %clc的作用就是清屏幕
clear; %clear是删除所有的变量
closeall; %close all是将所有打开的图片关掉。
Matlab的帮助文档、很全面,非常好:图形 - MATLAB & Simulink - MathWorks 中国
https://ww2.mathworks.cn/help/releases/R2020a/matlab/graphics.html?s_tid=CRUX_lftnav
1、matlab坐标轴设置多种字体(复合字体)
x = 0:0.01:2*pi;
y = sin(x);
plot(x,y);
xlabel(['\fontname{宋体}长度\fontname{Times new roman} (mm)'])
2、matlab图片中title生成的标题转移至图像下端
xlabel({'bbb','ccc'})
3、指定对应格式和期望dpi的图像进行保存、以及不留白保存
方法一:无法去除留白
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './img.png') %即可得到对应格式和期望dpi的图像
方法二:可以去除留白
也可以使用 exportgraphics 函数保存内容,此函数从 R2020a 开始提供。此函数围绕您的内容提供相同的精确裁剪,还提供了其他选项。例如,您可以保存图像文件并指定分辨率。
img =gcf; %获取当前画图的句柄
exportgraphics(img,'myplot.png','Resolution',300) %即可得到对应格式和期望dpi的图像
4、设置字体字号(x、y轴,标题。全局字体等)
% 字体和字号
hTitle = title('Visualization of air flow data over North America'); % 设置标题
hXLabel = xlabel('xaxis'); % 设置x轴标签
hYLabel = ylabel('yaxis','FontSize', 11); % 设置y轴标签
set(gca, 'FontSize', 10, 'FontName', 'Arial') % 设置全局字体
set([hXLabel, hYLabel], 'FontSize', 11, 'FontName', 'Arial') % 设置x、y轴标签字体
5、设置刻度值信息,只有左、下有边框等
set(gca, 'Box', 'off', ... % 边框
'LineWidth',1,... % 线宽
'XGrid', 'off', 'YGrid', 'off', ... % 网格
'TickDir', 'out', 'TickLength', [.02 .01], ... % 刻度
'XMinorTick', 'off', 'YMinorTick', 'off', ... % 小刻度
'XColor', [.1 .1 .1], 'YColor', [.1 .1 .1]) % 坐标轴颜色
6、指定x、y轴刻度值
xticks([2,4,6,8,10])
% xticklabels({'2','4','6','8','10'})
yticks([1,2,3,4])
% yticklabels({'1','2','3','4'})
7、利用插值绘制热力图、或无插值热力图
x=[2,4,6,8,10];
y=[1,2,3,4];
[x_grid,y_grid]=meshgrid(x,y);
z= [95,92,94,91,90;
84,98,87,89,95;
86,95,89,91,95;
91,90,92,94,93];
% 进行插值的重要参数shading interp;
pcolor(x_grid,y_grid,z);colormap("parula");shading interp;colorbar;
或者这样绘制插值热力图:
s=pcolor(x_grid,y_grid,z);colormap("parula");colorbar;
s.FaceColor = 'interp'; % 插值
set(s,'linestyle','None'); % 不显示网格
绘制无插值热力图:
s=pcolor(x_grid,y_grid,z);colormap("parula");colorbar;
set(s,'linestyle','-','EdgeColor',[1 1 1]); % 设置网格样式和颜色
8、自定义RGB颜色绘图
color_1=[0 0 128]/255;
color_2=[121 255 125]/255;
color_3=[128 0 0]/255;
num12=100;num23=100;
R_mat=[linspace(color_1(1),color_2(1),num12),linspace(color_2(1),color_3(1),num23)];
G_mat=[linspace(color_1(2),color_2(2),num12),linspace(color_2(2),color_3(2),num23)];
B_mat=[linspace(color_1(3),color_2(3),num12),linspace(color_2(3),color_3(3),num23)];
color_map_RGB=[R_mat',G_mat',B_mat'];
figure(2)
pcolor(x_grid,y_grid,z);colormap(color_map_RGB);colorbar;
9、绘制多个组图、及相关设置。包括组图x、y轴标签、标题,以及组图色条等
- 组图绘制
方法一:即在设置好绘图参数后,绘制下一个图时使用 nexttile 命令。可以压缩间隔。非常推荐。点击链接查看使用方法
从 R2019b 开始,您可以使用 tiledlayout 函数在图窗中创建分块图。该函数具有用于最小化绘图周围空间的选项。
通过调用
tiledlayout
函数,创建一个 2×2 分块图布局。要最小化绘图之间的空间,请将'TileSpacing'
名称-值对组参数设置为'compact'
。要使布局周围的空间最小化,请将'Padding'
名称-值对组参数设置为'compact'
。下一步,调用nexttile
函数创建第一个坐标区,并调用plot
函数在坐标区中绘图。然后再创建三个坐标区和绘图。
t = tiledlayout(2,2,'TileSpacing','Compact','Padding','Compact');
nexttile
plot([0 1])
nexttile
plot([1 0])
nexttile
plot([0 1 0 1])
nexttile
plot([1 0 1 0])
如何自定义组图,例如一图占两列等:
调用
nexttile
函数以创建占据两行三列的坐标区对象。
nexttile([2 3]); % 即修改此代码,占两行三列。此时绘图应该在上一个nexttile之后,后一个图需要占占两行三列的情况
bar([1 2 3 4],scores)
legend('Team 1','Team 2','Team 3','Location','northwest')
% Configure ticks and axis labels
xticks([1 2 3 4])
xlabel('Game')
ylabel('Score')
% Add layout title
title(t,'April Bowling League Data')
直接指定在第几个框画图:
要从特定位置开始放置坐标区对象,请指定图块编号和跨度值。
t = tiledlayout(3,3);
nexttile(7)
更加灵活的使用:
显示一个带有图例的较大绘图。调用
nexttile
函数以将坐标区的左上角放在第五个图块中,并使坐标区占据图块的两行和两列。绘制所有团队的分数。将 x 轴配置为显示四个刻度,并为每个轴添加标签。然后在布局顶部添加一个共享标题。
nexttile(5,[2 2]);
方法二:直接调用 subplot,用法和python一样。但是好像不能压缩间隔。
从 R2019b 开始,您可以使用 tiledlayout 函数在图窗中创建分块图。该函数具有用于最小化绘图周围空间的选项。(如果您使用的是较早的版本,您可以使用 subplot 函数来创建分块图。不过,
subplot
函数没有用于控制绘图周围空间的选项。
figure(1) % define figure
subplot(2,2,1); % subplot(x,y,n)x表示显示的行数,y表示列数,n表示第几幅图片
plot([0 1])
subplot(2,2,2);
plot([1 0])
subplot(2,2,3);
plot([0 1 0 1])
subplot(2,2,4);
plot([1 0 1 0])
- 组图标签
通过使添加共享标题和共用轴标签
t
的title
,xlabel
和ylabel
功能。通过移除移动地块靠得更近X从上图轴刻度标记和设置TileSpacing
的属性t
来'compact'
。
% Add shared title and axis labels
title(t,'My Title');
xlabel(t,'x-values');
ylabel(t,'y-values');
% xticklabels(ax1,{1,5}); %定义ax1图的x轴标签
t.TileSpacing = 'compact';
- 组图色条
%设置组图的色条
cb = colorbar;
cb.Layout.Tile = 'east';
10、自定义色条标签
contourf(peaks)
colorbar('Ticks',[-5,-2,1,4,7],...
'TickLabels',{'Cold','Cool','Neutral','Warm','Hot'})
给色条添加标题
surf(peaks)
c = colorbar;
c.Label.String = 'Elevation (ft in 1000s)';
11、颜色条反转
使用flipud() 函数
colormap(flipud(map));
12、matlab figure 调整大小
set (gcf,'Position',[500,300,520,260])
13、更值得推荐的组图绘制方法(tight_subplot,可自定义间隔)
前面第9部分讲述了利用 tiledlayout 进行组图绘制,然而可能会出现间隔还是很大的问题:
为了解决这个问题,我们可以利用自定义函数tight_subplot来解决。
- 自定义函数如下(保存的时候,函数名命名为:tight_subplot):
function ha = tight_subplot(Nh, Nw, gap, marg_h, marg_w)
% tight_subplot creates "subplot" axes with adjustable gaps and margins
%
% ha = tight_subplot(Nh, Nw, gap, marg_h, marg_w)
%
% in: Nh number of axes in hight (vertical direction)
% Nw number of axes in width (horizontaldirection)
% gap gaps between the axes in normalized units (0...1)
% or [gap_h gap_w] for different gaps in height and width
% marg_h margins in height in normalized units (0...1)
% or [lower upper] for different lower and upper margins
% marg_w margins in width in normalized units (0...1)
% or [left right] for different left and right margins
%
% out: ha array of handles of the axes objects
% starting from upper left corner, going row-wise as in
% going row-wise as in
%
% Example: ha = tight_subplot(3,2,[.01 .03],[.1 .01],[.01 .01])
% for ii = 1:6; axes(ha(ii)); plot(randn(10,ii)); end
% set(ha(1:4),'XTickLabel',''); set(ha,'YTickLabel','')
% Pekka Kumpulainen 20.6.2010 @tut.fi
% Tampere University of Technology / Automation Science and Engineering
if nargin<3; gap = .02; end
if nargin<4 || isempty(marg_h); marg_h = .05; end
if nargin<5; marg_w = .05; end
if numel(gap)==1;
gap = [gap gap];
end
if numel(marg_w)==1;
marg_w = [marg_w marg_w];
end
if numel(marg_h)==1;
marg_h = [marg_h marg_h];
end
axh = (1-sum(marg_h)-(Nh-1)*gap(1))/Nh;
axw = (1-sum(marg_w)-(Nw-1)*gap(2))/Nw;
py = 1-marg_h(2)-axh;
ha = zeros(Nh*Nw,1);
ii = 0;
for ih = 1:Nh
px = marg_w(1);
for ix = 1:Nw
ii = ii+1;
ha(ii) = axes('Units','normalized', ...
'Position',[px py axw axh], ...
'XTickLabel','', ...
'YTickLabel','');
px = px+axw+gap(2);
end
py = py-axh-gap(1);
end
在函数建立好后,我们在主页的路径设置中导入即可使用。
- 使用方法如下:
[ha,pos]=tight_subplot(Nh,Nw,gap,marg_h,marg_w)
% ha 是坐标轴句柄,pos是每个坐标轴的原点与长宽
% Nh,Nw 可以认为是几行几列
% gap是子图的纵向和横向间距,gap(1)为纵向,gap(2)为横向
% marg_h是图件与上下边缘的距离,marg_h(1)为距下边缘的距离,marg_h(2)是距上边缘的距离
% marg_w 是图件与左右边缘的距离,marg_w(1)为距左边缘的距离,marg_w(2)是距右边缘的距离。
相关参数可见下图示意
应用示例:
ha = tight_subplot(1,2,[0.03 0.01],[.1 .01],[.01 .01]);
for ii = 1:2;
axes(ha(ii));
imshow(imread("th.jpg"));
end
可以很明显的看出间距的调整,可以自定义gap、marg_h、marg_w的参数,找到适合自己的间距。这时相比于之前的间隔非常小,非常nice.
此外,我们可以批量设置多个组图参数:
ha = tight_subplot(3,2,[.01 .03],[.1 .01],[.01 .01])
for ii = 1:6;
axes(ha(ii));
plot(randn(10,ii));
end
set(ha(1:4),'XTickLabel',''); % 批量设置多个组图参数
set(ha,'YTickLabel',''); % 批量设置多个组图参数
文章来源:https://www.toymoban.com/news/detail-425913.html
最后,可以通过设置以下参数保存图像、画布大小等文章来源地址https://www.toymoban.com/news/detail-425913.html
set (gcf,'Position',[500,300,520,460]) # 设置画布大小,和前面的tight_subplot组合使用更好
img =gcf; %获取当前画图的句柄
exportgraphics(img,'12.png','Resolution',600)
到了这里,关于Matlab绘图中的一些技能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!