【MATLAB学习笔记】绘图——设置次刻度线的数量、设置刻度线的宽度(粗细)和长度

前言

  在MATLAB中,将XMinorTicktrue或者YMinorTicktrue设置为true可以很方便地设置X轴或者Y轴次刻度线,但是次刻度线的数量是MATLAB自适应设置的,无法直接进行修改。在本文章中,提供了一个直接设置X轴或者Y轴次刻度线数量的函数,并提供了函数的使用示例。此外,还对刻度线的宽度(粗细)和长度进行了设置。

设置次刻度线数量函数

  设置次刻度线数量函数setMinorTick如下,该函数必须输入一个窗口对象ax,ax通常可以赋值为gca;N表示设置的次刻度线数量,默认为4;XYAxis表示设置的坐标轴(XY轴:0;X轴:1;Y轴:2),默认为0,即同时设置X轴和Y轴。

function setMinorTick(ax, N, XYAxis)
% 设置次刻度线数量
% ax 需要设置的绘图对象, 通常为ax = gca
% N 次刻度线的数量  默认:4
% XYAxis 设置的坐标轴(XY轴:0  X轴:1  Y轴:2)  默认:X轴和Y轴

if nargin < 2, N = 4; end   
if nargin < 3, XYAxis = 0; end  

% 设置X轴的次刻度线
if XYAxis == 0 || XYAxis == 1
    set(ax,'XMinorTick',true)   % 开启X轴的次刻度线

    % 当前次刻度线的最小和最大值
    XAxis_min = min(get(ax.XAxis,'TickValues'));
    XAxis_max = max(get(ax.XAxis,'TickValues'));
  
    % 当前主刻度线的数量
    XAxis_N = length(get(ax.XAxis,'TickValues'));

    % 计算新刻度线的间隔
    XAxis_space = (XAxis_max-XAxis_min)/((XAxis_N-1)*(N+1));

    % 设置新刻度线
    ax.XAxis.MinorTickValues = XAxis_min:XAxis_space:XAxis_max;
end

% 设置Y轴的次刻度线 
if XYAxis == 0 || XYAxis == 2
    set(ax,'YMinorTick',true)
    YAxis_min = min(get(ax.YAxis,'TickValues'));
    YAxis_max = max(get(ax.YAxis,'TickValues'));
    YAxis_N = length(get(ax.YAxis,'TickValues'));
    YAxis_space = (YAxis_max-YAxis_min)/((YAxis_N-1)*(N+1));
    ax.YAxis.MinorTickValues = YAxis_min:YAxis_space:YAxis_max;
end

end

示例

基本绘图

  下面这是基本的绘图代码,具体细节可以参考前面的文章(点击转跳)。

clc;clear;close all
set(0,'defaultfigurecolor','w');

%% 数据
x = 0:0.01:1;   % 产生0到1, 步长为0.01的序列
y = 2*x + 1;    % y为x一次函数
rng(100)    % 随机数种子,使每次随机数都是一样的
r = (rand(1,length(x)) - 0.5) * 2;  %产生-1到1的随机数
y1 = y + r*0.5; %对y施加扰动(为了模拟数据)

%% 绘图
f = figure(1);
ax = gca;   % 将当前坐标区实例化
plot(x,y,'-k',x,y1,'ok','LineWidth',1.3)

hold on

set(gca,'FontName','Times New Roman','FontSize',13)
xlabel('\fontname{宋体} 位移\fontname{Times New Roman} \it x/\rm mm')
ylabel('\fontname{宋体} 力\fontname{Times New Roman} \it y/\rm N')

% 图例
le = legend('拟合数据','原始数据','FontName','宋体','Location','northwest');
% legend('boxoff')    %取消图例边框
le.EdgeColor = 'none';
le.Color = 'none';
le.LineWidth = 1.3;

% 设置次刻度线
set(gca,'XMinorTick',true)
set(gca,'YMinorTick',true)

% 去除上边框、右边框刻度线
box off     % 取消边框
ax1 = axes('Position',get(ax,'Position'),'XAxisLocation','top',...
    'YAxisLocation','right','Color','none','XColor','k','YColor','k');  % 设置坐标区
set(ax1,'XTick', [],'YTick', []);   % 去掉xy轴刻度
hold off

  运行代码后得到下面的结果图。可以看到,通过set(gca,‘XMinorTick’,true)和set(gca,‘YMinorTick’,true)后已经有次刻度线了,但是无法设置次刻度线的数量。
在这里插入图片描述

设置次刻度线数量函数的使用

  可以将set(gca,‘XMinorTick’,true)和set(gca,‘YMinorTick’,true)删除(其实不删也行),接着调用setMinorTick对次刻度线进行设置,注意ax在前面已经赋值了,见上一个代码块。

  • 对X轴和Y轴设置数量为4的次刻度线
% 设置次刻度线
% set(gca,'XMinorTick',true)
% set(gca,'YMinorTick',true)
setMinorTick(ax,4)

或者

% 设置次刻度线
setMinorTick(ax,4,0)

运行结果图如下,可以看到X轴和Y轴的次刻度线数量已经变为4了。
在这里插入图片描述

  • 对X轴设置数量为4的次刻度线
setMinorTick(ax,4,1)

在这里插入图片描述

  • 对Y轴设置数量为4的次刻度线
setMinorTick(ax,4,2)

在这里插入图片描述

  • 设置其他数量的次刻度线

  同样还可以设置任意数量(大于0)的刻度线,比如1、2、3…

setMinorTick(ax,1,0)

在这里插入图片描述

setMinorTick(ax,2,0)

在这里插入图片描述

setMinorTick(ax,3,0)

在这里插入图片描述

设置刻度线的长度

  设置刻度线的长度可以直接通过TickLength属性进行设置。对于TickLength属性的MATLAB文档解释如下:

  • 刻度线长度,指定为 [2Dlength 3Dlength]形式的二元素向量。第一个元素是二维视图中的刻度线长度,第二个元素是三维视图中的刻度线长度。指定值是以可见的 x 轴、y 轴或 z轴中最长线条为基准进行归一化的值。

  通俗来说就是第一个值设置二维刻度线长度,第二个值设置三维刻度线的长度。例如下面的代码中设置的二维刻度线的长度为0.015,后面的0.35是三维刻度线的长度(二维图形不用管0.35这个值,随便给,只要合理就行)。

set(ax,'TickLength',[0.015, 0.035])

或者

set(gca,'TickLength',[0.015, 0.035])

  对刻度线长度进行了设置后得到下面的结果图。可以看到,当前的刻度线长度明显比之前的刻度线长度长了。(注:默认的刻度线长度为0.01)
在这里插入图片描述

设置刻度线和轴线的宽度

  设置刻度线和轴线的宽度很简单,只需要对lineWidth属性重新赋值即可,下面的代码将刻度线和轴线的宽度设置为1。(注:默认的宽度为0.5)

set(ax,'lineWidth',1)

或者

set(gca,'lineWidth',1)

在这里插入图片描述
  设置了刻度线和轴线的宽度后,上、右边框的宽度没有发生改变,这是因为去除上、右边框刻度线时重新设置了一个新的绘图区,对新绘图区的轴线宽度也要进行修改。在原本去除上、右边框刻度线的代码后面加入如下代码,注意此时的图对象为ax1,不是ax!

% 去除上边框、右边框刻度线
box off     % 取消边框
ax1 = axes('Position',get(ax,'Position'),'XAxisLocation','top',...
    'YAxisLocation','right','Color','none','XColor','k','YColor','k');  % 设置坐标区
set(ax1,'XTick', [],'YTick', []);   % 去掉xy轴刻度
hold off

% 修改新绘图区的轴线宽度
set(ax1,'lineWidth',1)

运行结果图如下:
在这里插入图片描述

总代码

  总代码如下,后续还会继续更新一些MATLAB绘图的技巧和细节,制作不易,别忘了关注和点赞喔

clc;clear;close all
set(0,'defaultfigurecolor','w');

%% 数据
x = 0:0.01:1;   % 产生0到1, 步长为0.01的序列
y = 2*x + 1;    % y为x一次函数
rng(100)    % 随机数种子,使每次随机数都是一样的
r = (rand(1,length(x)) - 0.5) * 2;  %产生-1到1的随机数
y1 = y + r*0.5; %对y施加扰动(为了模拟数据)

%% 绘图
f = figure(1);
ax = gca;   % 将当前坐标区实例化
plot(x,y,'-k',x,y1,'ok','LineWidth',1.3)

hold on

set(gca,'FontName','Times New Roman','FontSize',13)
xlabel('\fontname{宋体} 位移\fontname{Times New Roman} \it x/\rm mm')
ylabel('\fontname{宋体} 力\fontname{Times New Roman} \it y/\rm N')

% 图例
le = legend('拟合数据','原始数据','FontName','宋体','Location','northwest');
% legend('boxoff')    %取消图例边框
le.EdgeColor = 'none';
le.Color = 'none';
le.LineWidth = 1.3;

% 设置次刻度线
% % set(gca,'XMinorTick',true)
% % set(gca,'YMinorTick',true)
setMinorTick(ax,4)    % 对X轴和Y轴设置数量为4的次刻度线
% setMinorTick(ax,4,0)  % 对X轴和Y轴设置数量为4的次刻度线 
% setMinorTick(ax,4,1)  % 对X轴设置数量为4的次刻度线
% setMinorTick(ax,4,2)  % 对Y轴设置数量为4的次刻度线
% setMinorTick(ax,1,0)  % 对X轴和Y轴设置数量为1的次刻度线 
% setMinorTick(ax,2,0)  % 对X轴和Y轴设置数量为2的次刻度线 
% setMinorTick(ax,3,0)  % 对X轴和Y轴设置数量为3的次刻度线 

% 设置刻度线的长度
set(ax,'TickLength',[0.015, 0.035])

% 设置坐标轴的粗细
set(ax,'lineWidth',1)

% 去除上边框、右边框刻度线
box off     % 取消边框
ax1 = axes('Position',get(ax,'Position'),'XAxisLocation','top',...
    'YAxisLocation','right','Color','none','XColor','k','YColor','k');  % 设置坐标区
set(ax1,'XTick', [],'YTick', []);   % 去掉xy轴刻度
hold off

% 修改新绘图区的轴线宽度
set(ax1,'lineWidth',1)

% 保存图片
print(f,'-dpng','FigName','-r600')%保存图像


function setMinorTick(ax, N, XYAxis)
% 设置次刻度线数量
% ax 需要设置的绘图对象, 通常为ax = gca
% N 次刻度线的数量  默认:4
% XYAxis 设置的坐标轴(XY轴:0  X轴:1  Y轴:2)  默认:X轴和Y轴

if nargin < 2, N = 4; end   
if nargin < 3, XYAxis = 0; end  

% 设置X轴的次刻度线
if XYAxis == 0 || XYAxis == 1
    set(ax,'XMinorTick',true)   % 开启X轴的次刻度线

    % 当前次刻度线的最小和最大值
    XAxis_min = min(get(ax.XAxis,'TickValues'));
    XAxis_max = max(get(ax.XAxis,'TickValues'));
  
    % 当前主刻度线的数量
    XAxis_N = length(get(ax.XAxis,'TickValues'));

    % 计算新刻度线的间隔
    XAxis_space = (XAxis_max-XAxis_min)/((XAxis_N-1)*(N+1));

    % 设置新刻度线
    ax.XAxis.MinorTickValues = XAxis_min:XAxis_space:XAxis_max;
end

% 设置Y轴的次刻度线 
if XYAxis == 0 || XYAxis == 2
    set(ax,'YMinorTick',true)
    YAxis_min = min(get(ax.YAxis,'TickValues'));
    YAxis_max = max(get(ax.YAxis,'TickValues'));
    YAxis_N = length(get(ax.YAxis,'TickValues'));
    YAxis_space = (YAxis_max-YAxis_min)/((YAxis_N-1)*(N+1));
    ax.YAxis.MinorTickValues = YAxis_min:YAxis_space:YAxis_max;
end

end

总结

  这只是一个基础的示例,实际中还会有更具体的、更细致的要求,这就需要再做额外调整;另外本人也仍在学习中,这只是个人的学习笔记,可能还有一些不足之处,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Infww

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

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

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

打赏作者

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

抵扣说明:

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

余额充值