MATLAB软件版本:MATLAB R2019b
一、绘图代码示例
% 初始化
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);