参考视频:MATLAB绘图入门的正确姿势(MATLAB绘图入门教程)

MATLAB软件版本:MATLAB R2019b

@[TOC]

一、绘图代码示例

% 初始化
clear;
clc;

% 将图片的字体等格式设置成latex样式,方便输入公式
set(0,'defaulttextinterpreter','latex');
set(0,'defaultAxesTickLabelInterpreter','latex');
set(0,'defaultLegendInterpreter','latex');

set(groot,'defaultLineLineWidth',2); % 更改默认线宽

%% 产生x,y数据
x=linspace(0,2*pi,20);
y{1}=sin(x);
y{2}=cos(x);
y{3}=x;
y{4}=exp(sin(x));

%% 绘制图1
figure(1);
plot(x,y{1},'--ro',... % --虚线 r红色 o圆圈标记
    x,y{2},':k^',... % :点组成的线 k黑色 ^三角形标记
    x,y{3},'-.',... % -.线如-.
    x,y{4});
xlabel('x轴');
ylabel('y轴');
title('例图');
% legend显示图中曲线对应的公式(在坐标区上添加图例)
legend('$y=sin(x)$','$y=cos(x)$','$y=x$','$y=e^{sin(x)}$','Location','best');
xlim([0,2*pi]); % 设置x轴范围
print('C:\Users\LJW\Desktop\example1','-dpng'); % 保存为png格式图片到桌面路径 

%% 绘制图2
figure(2);

subplot(2,2,1); % 分成2*2四个子图,开始画第一个子图
plot(x,y{1},'--');
title('$y=sin(x)$');

subplot(2,2,2); % 分成2*2四个子图,开始画第二个子图
plot(x,y{2},':');
title('$y=cos(x)$');

subplot(2,2,[3,4]); % 第3,4个子图合并,写成[3,4]
plot(x,y{3},':',x,y{4}); % 2个子图合并
legend('$y=x$','$y=e^{sin(x)}$','Location','best');
xlim([0,2*pi]); % 设置x轴范围

print('C:\Users\LJW\Desktop\example2','-dpng'); % 保存为png格式图片到桌面路径 

example1.png如下:
在这里插入图片描述
example2.png如下:
在这里插入图片描述

二、读取excel表格

(1)readtable

% 读取类型:table类型
newraw=readtable('C:\Users\LJW\Desktop\广东总表.xlsx'); 

(2)xlsread

% x纯数据  txt纯文本  raw未处理的原格式
[x,txt,raw]=xlsread('C:\Users\LJW\Desktop\广东总表.xlsx'); 

readtable运行时间比xlsread短。

三、时间处理函数

>> now=fix(clock) // 获取现在时间的行向量,表示2020.9.9 10:51:35

now =

        2020           9           9          10          51          35

>> datestr(now) // 把行向量转换为现在时间的字符串

ans =

    '09-Sep-2020 10:51:35'

>> date // date直接获取当前日期

ans =

    '09-Sep-2020'

>> n=datenum(date) // 给出0000年到给定时间的天数

n =

      738043

四、实例:绘制广东历史疫情曲线图(时间作为x轴)

准备好原始Excel表格数据(广东省 01/19~06/02 的历史疫情数据)

可在此处下载:https://download.csdn.net/download/ljw_study_in_CSDN/12833108
在这里插入图片描述
绘图代码:

clear;
clc;

% 将图片的字体等格式设置成latex样式,方便输入公式
set(0,'defaulttextinterpreter','latex');
set(0,'defaultAxesTickLabelInterpreter','latex');
set(0,'defaultLegendInterpreter','latex');

set(groot,'defaultLineLineWidth',2); % 更改默认线宽

% 时间先转换为datenum
x=datenum('2020/01/19','yyyy/mm/dd'):datenum('2020/06/02','yyyy/mm/dd'); 

% 读表,'PreserveVariableNames',1 表示保留表头的原属性名
t=readtable('C:\Users\LJW\Desktop\广东总表.xlsx','PreserveVariableNames',1); 

data=table2array(t(:,3:9)); % 将table形式转换成纯数据,只取3-9列

[n,m]=size(data); % n行m列
for i=1:m
    y{i}=data(:,i)'; % 将每列单独取出
end

%% 画四条线,x轴表示时间,间隔使用datetick
figure(1);
plot(x,y{1},':',... % 累积确诊
    x,y{5},... % 现存确诊
    x,y{3},'-.',... % 累积治愈
    x,y{4},'--'); % 累积死亡
legend('累积确诊','现存确诊','累积治愈','累积死亡','Location','best');
title('广东疫情可视化-1');
xlabel('日期');
ylabel('人数');
datetick('x','mm-dd');
xlim([x(1),x(n)]);
print('C:\Users\LJW\Desktop\广东疫情可视化-1','-dpng');

%% 画一条线,x轴表示时间,间隔自定义
figure(2);
plot(x,y{5}); % 现存确诊
legend('现存确诊','Location','best');
title('广东疫情可视化-2');
xlabel('日期');
ylabel('人数');
step=15; % 自定义间隔step
xt=x(1):step:x(n);
xl=datestr(x(1):step:x(n),'mm-dd');
set(gca,'xtick',xt);
set(gca,'xticklabel',xl);
xlim([x(1),x(n)]);
print('C:\Users\LJW\Desktop\广东疫情可视化-2','-dpng');

绘图结果:
在这里插入图片描述
在这里插入图片描述

可以看到,图1和图2的x轴显示标记间隔不同,这是由于这两段代码的差别:

% 图1
datetick('x','mm-dd'); % 自动形成时间间隔
% 图2
step=15; % 自定义间隔step
xt=x(1):step:x(n);
xl=datestr(x(1):step:x(n),'mm-dd');
set(gca,'xtick',xt);
set(gca,'xticklabel',xl);