MATLAB 快速标准绘图的实现


前言

MATLAB(Matrix Laboratory)是美国MathWorks公司推出的一款强大的商业数学软件,是世界三大数学软件之一,广泛应用数据分析、图像处理与计算机视觉、无线通信、深度学习、图像处理与计算机视觉、信号处理、机器人、控制系统、电力系统分析等领域。MATLAB软件提供的Simulink工具箱可实现可视化模块的建构和模型仿真,在线性系统建模、非线性系统建模和自动控制领域得到了广泛的应用。
科研绘图是科研人员在科研过程中必须掌握的基本技能,科研绘图需要的样式需要满足科研绘图中的要求,而MATLAB所具有的强大的绘图功能在科研领域得到广泛的应用。因此,掌握MATLAB绘图,是科研人员攀登人类科研顶峰需要掌握的一项基本技能,自动化的绘图方法有利于科研人员减轻绘图方面的工作量,将更多的精力集中在科学研究本身上。

一、绘图中采用的函数

绘图采用自己编写的subplot_std()函数进行绘图,该函数按照子图的方式将数据进行二维标准绘图,可设置线段宽度和坐标标注的字体、字号,其表示形式为

function ax = subplot_std(x, y, row, col, count, x_name, y_name, theme, lw, fn, ft)
% 输入变量
% x: x轴数据
% y: y轴数据
% row: 子图的行数
% col: 子图的列数
% count: 该次绘制过程中所在子图位置的编号
% x_name: 横坐标标注
% y_name: 纵坐标标注
% theme: 标题
% lw: 曲线的宽度
% fn: 坐标标注的字体
% ft: 坐标标注的字号
%
% 输出变量
% ax: 坐标句柄

二、函数模块

1.检查输入变量

if nargin < 5 || nargin > 11
    % 输入的变量数必须在5-11个之间
    error('输入变量的个数不满足要求,请在检查输入变量后重新输入');
elseif nargin <= 10
    % 默认字体大小为12磅
    ft = 12;
    if nargin <= 9
        % 默认字体为Times New Roman(时代新罗马)字体
        fn = 'Times New Roman';
        if nargin <= 8
            % 默认曲线宽度为1.5磅
            lw = 1.5;
            if nargin <= 7
                % 默认主题为空
                theme = '';
                if nargin <= 6
                    % 默认纵坐标不标注
                    y_name = '';
                    if nargin <= 5
                        % 默认横坐标不标注
                        x_name = '';
                    end
                end
            end
        end
    end
end

if count > row*col
    error(['绘图的编号数大于给定的区域索引数目!', ' ', num2str(count), ' '...
        , '>', ' ', num2str(row), ' ', '*', ' ', num2str(col)]);
end

2.绘制图像

ax = subplot(row, col, count);    
plot(x, y, 'LineWidth', lw);
% 设置x轴范围和标注
xlabel(x_name);
% 设置y轴范围和标注
ylabel(y_name);
grid('on');
title(theme);
% 设置标注的字体和字号
ax.FontSize = ft;
ax.FontName = fn;

3.检查输出变量

if nargout == 0
    % 当缺省输出变量时,不对外输出任何变量
    clear ax;
elseif nargout ~= 1
    % 不能存在1个以上的输出变量
    error('输出变量的个数不满足要求,请在检查输出变量后重新输入');
end

三、使用案例

绘制电压暂降前后暂降点处的三相电压有效值标幺值和瞬时有名值随时间变化的图像。设置曲线宽度为1.5磅,标注文字字体为Times New Roman(时代新罗马),字号为12磅。

% 获取/生产 原始数据
t1 = out.RMS_Voltage_of_IM_in_pu.time;
y1 = out.RMS_Voltage_of_IM_in_pu.signals.values;
t2 = out.Voltage_of_IM_in_SI.time;
y2 = out.Voltage_of_IM_in_SI.signals.values;

% 横纵坐标标注
x_name = 't(s)';
y_name1 = 'U_{ABC}(t)(p.u.)';
y_name2 = 'u_{ABC}(t)(V)';

% 主题标注
Theme_1 = 'RMS Voltage (p.u.) between the bus PCC and the ground';
Theme_2 = 'Transient Voltage (V) between the bus PCC and the ground';

% 设置绘图曲线的宽度
lw=1.5;

% 设置绘图的字体样式
fn_en = 'Times New Roman'; %英文字体新罗马

% 设置绘图的字体大小
ft=12; % FontSize

% 声明一个新figure
figure();

% 全屏显示
set(gcf,'outerposition',get(0,'ScreenSize'));

% 绘制图像
subplot_std(t1, y1, 2, 1, 1, x_name, y_name1, Theme_1, lw, fn_en, ft);
subplot_std(t2, y2, 2, 1, 2, x_name, y_name2, Theme_2, lw, fn_en, ft);

绘制结果如下所示:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Academia1998

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

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

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

打赏作者

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

抵扣说明:

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

余额充值