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

news2024/9/20 12:34:34

目录

  • 前言
  • 设置次刻度线数量函数
  • 示例
    • 基本绘图
    • 设置次刻度线数量函数的使用
  • 设置刻度线的长度
  • 设置刻度线和轴线的宽度
  • 总代码
  • 总结

前言

  在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,0)

在这里插入图片描述

  • 对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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录DAY25 - 回溯算法 - 08/24

目录 非递减子序列 题干 思路和代码 递归法 递归优化 全排列 题干 思路和代码 递归法 全排列Ⅱ 题干 思路和代码 方法一&#xff1a;用集合 set 去重 方法二&#xff1a;先排序&#xff0c;再用数组去重 非递减子序列 题干 题目&#xff1a;给你一个整数数组 nu…

python动画:manim中的目标位置移动,线条末端和两条线相切的位置处理

一&#xff0c;Manim中目标的位置移动 在 Manim 中&#xff0c;shift 函数用于在三维空间或二维平面上对对象进行平移。通过 shift 方法&#xff0c;用户可以快速移动场景中的物体&#xff0c;指定移动的方向和距离。方向通常由预定义的常量&#xff08;如 UP, DOWN, LEFT, RI…

opencv-python图像增强十五:高级滤镜实现

文章目录 前言二、鲜食滤镜三、巧克力滤镜三&#xff0c;冷艳滤镜&#xff1a; 前言 在之前两个滤镜文章中介绍了六种简单的滤镜实现&#xff0c;它们大多都是由一个单独函数实现的接下来介绍五种结合了之前图像增强文章提的的算法的复合滤镜。本案例中的算法来自于文章一&…

【数学建模】TOPSIS法(优劣解距离法)

TOPSIS法&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff0c;优劣解距离法&#xff09;是一种多准则决策分析方法&#xff0c;它基于这样一个概念&#xff1a;最理想的方案应该是距离理想解最近而距离负理想解最远的方案。以下是使用TOPS…

【React原理 - 任务调度和时间分片详解】

概述 在React15的时候&#xff0c;React使用的是从根节点往下递归的方式同步创建虚拟Dom&#xff0c;由于递归具有同步不可中断的特性&#xff0c;所以当执行长任务时(通常以60帧为标准&#xff0c;即16.6ms)就会长时间占用主线程长时间无响应&#xff0c;导致页面卡顿&#x…

如何使用Gitee管理自己的项目

如何使用Gitee管理自己的项目 前言 本地创建的工程项目不利于管理&#xff0c;电脑设备丢失损坏&#xff0c;代码就找不回来了。 并且多人同时使用一个项目工程也不方便。 国内的代码托管平台&#xff0c;Gitee为我实现了远程代码管理。 并且该平台可以设置为开源和私有两种…

公司邮箱如何建立

而建立一套完善的公司邮箱系统&#xff0c;则是实现这一目标的重要一环。本文将深入探讨公司邮箱的建立过程&#xff0c;以及其在业务中的重要性。 1. 确定邮箱域名 公司邮箱的建立首先要确定一个专属的邮箱域名。域名是公司在网络上的身份标识&#xff0c;例如&#xff0c;公…

程序猿成长之路之数据挖掘篇——Kmeans聚类算法

Kmeans 是一种可以将一个数据集按照距离&#xff08;相似度&#xff09;划分成不同类别的算法&#xff0c;它无需借助外部标记&#xff0c;因此也是一种无监督学习算法。 什么是聚类 用官方的话说聚类就是将物理或抽象对象的集合分成由类似的对象组成的多个类的过程。用自己的…

VSCode插件 live Server

普通打开 安装live Server 包含端口 说明内置了服务器

改造小蚁摄像头支持免费无限容量云储存(Samba挂载篇)

为什么要改造&#xff1f; 插卡摄像头最大的一个问题就是频繁的读写会导致内存卡寿命急速下降&#xff0c;哪怕是市面上支持NAS转存的摄像头也是先录制到SD卡里&#xff0c;然后把SD卡上的视频再转存到NAS。同样对内存卡和NAS硬盘寿命都是损耗巨大。而这类监控视频绝大多数情况…

重磅!小米将对外公开超 1000 万行的 Xiaomi Vela 开源代码

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 如果说接下来的澎湃OS系统会带来很强的吸引力&#xff0c;那么第二个惊喜也是随之而来&#xff0c;那就是小米Vela开源大动作。 早在2017年起&#xff0c;小米就活跃于 NuttX 社区&#xff0c…

Reinforcement-Learning 2.State Value and Bellman Equation

目录 0.Outline 1.Motivating examples Motivating example 1: Why return is important? Motivating example 2: How to calculate return? 2.State value 3.Bellman equation: Derivation Deriving the Bellman equation An illustrative example Exercise 4.Be…

FreeSWITCH 1.10.10 简单图形化界面28 - 麒麟V10 SP3服务器系统X86和ARM版本安装FreeSWITCH

FreeSWITCH 1.10.10 简单图形化界面28 - 麒麟V10 SP3 服务器系统X86和ARM版本安装FreeSWITCH 界面预览00、先看使用手册01、 麒麟服务器v10 sp3 x86版本1、安装操作系统2、下载安装脚本3、安装 02、麒麟服务器v10 sp3 arm版本1、安装操作系统2、下载安装脚本3、安装 03、登录网…

搭建一个私有的知识库mm-wiki

文章目录 前言一、mm-wiki二、安装步骤下载安装 总结 前言 一般公司内部想要记录一些东西,都需要一个共享文档,当然可以选择类似比较简单易用的,有道云笔记,腾讯文档,语雀等,但是肯定有些公司是保密的,所以不希望这些数据被泄露,当然选择本地存储是最安全的~ 一、mm-wiki 对于…

vue3+vite配置环境变量实现开发、测试、生产的区分

文章目录 一、为什么需要区分 (dev)、测试 (test) 和生产 (prod) 环境二、vue3的项目如何通过配置方式区分不同的环境1、创建不同环境的.env文件2、在不同的.env文件中配置相应的环境变量1&#xff09;.env.develoment2&#xff09;.env.test3&#xff09;.env.production 3、在…

查找2

树表的查找 1&#xff09;二叉排序树 I)二叉排序树的插入 II)二叉排序树的生成 III)二叉排序树的删除 2&#xff09;平衡二叉树 I&#xff09;平衡二叉树调整 、

MMOE+ESSM

MMOE 动机 多个任务之间的相关性并不是很强&#xff0c;这个时候如果再用过去那种共享底座embedding的结构&#xff0c;往往会导致『跷跷板』现象。 当前学术界已经有很多工作意识到1中描述的问题并且尝试去解决&#xff0c;但大多数工作的套路都是『大力出奇迹』的路子&…

zigbee笔记、十五、组播通信原理

一、zigbee四种通讯 1、单播&#xff08;略&#xff09; 2、广播&#xff08;略&#xff09; 3、组播&#xff1a;在zigbee网络中&#xff0c;模块可以用分组来标记&#xff0c;发送的模块如果发送的组号和网络里面标记接收模块的组号相对应&#xff0c;那么这些模块就可以拿到…

深度剖析渗透测试:流程、规范与实战全指南

一、引言 在当今数字化时代&#xff0c;网络安全问题日益凸显。渗透测试作为一种主动的安全评估方法&#xff0c;能够帮助企业和组织发现潜在的安全漏洞&#xff0c;提高系统的安全性。本文将详细介绍渗透测试的实施流程、规范、不同类型的测试方法以及相关的 checklist 和报告…

Matlab处理H5文件

1.读取h5文件 filenamexxx.h5; h5disp(filename) 2.h5文件保存为mat文件 读取 HDF5 文件中的数据 % 指定 HDF5 文件的路径 filename xxx.h5;% 读取 HDF5 文件中的各个数据集 A241_P h5read(filename, /A241_P); A241_W h5read(filename, /A241_W); A242_P h5read(filen…