有些问题因为过于基础反而很难在网上查到解决方式,这里记录一些类似的已经想办法解决的问题,文中代码都很简单所以就不提供数据了,关于下面这些问题如果朋友们有更好的解决办法,欢迎不吝赐教。
1 如何把多个子图拆分成单个
方法一: 在代码里找到 subplot,改为 plot。需要注意仅仅修改成 plot 可能出现后面的图把前面的图覆盖的情况,所以如果想一次性出现多个图的话,可以在每个子图前面的代码添加 “figure (i)” ,其中 i 是某个正整数。
方法二: 如果子图的 subplot 在函数里,又不想修改函数代码怎么办呢?可以画任意一个单张图,然后把子图复制粘贴在这单张图里面,再用鼠标把它尺寸调整到和这个单张图一致,随后将这个原本的单张图删掉,剩下的就是我们要的图了。这个单张图可以是任意的图,我们只需要它提供位置和尺寸,这里提供一个简单的出现单张图的代码:
figure (3) %这样出现的就是图3,避免覆盖前面的图
x=1:5;y=1:5;
plot(x,y)
当然,这种方法需要很细致的手动调整,如果想要一次性出很多图的话,建议还是使用方法一。
2 如何手动使坐标轴变成科学计数法
有时候 Matlab 坐标轴刻度会出现好几位数的情况,这个时候可能你想把它变成科学计数法显得更简洁。如何实现呢?打个比方,我想实现“x10^3”这种科学计数法,我个人的方法是在图片上显示“x10”、“3”的文本,然后把这三个文本移动到坐标轴旁边,调整文本大小和位置,这样也是看不出来的,具体效果及代码如下:
% 上证指数走势
SZ_index = xlsread('liupengyu004.xlsx','shangzheng_bsadf_defla_sa','u2:u84');
%因为取的是1000的科学计数法,所以数据要除以1000
SZ_index1=SZ_index/1000;
xxxx1=2001.50:0.25:2022.00; %时间范围
figure
plot(xxxx1,SZ_index1,'-')
text(2002,3,'x10')
text(2003,3,'3')
legend('上证指数','Location','NorthWest','FontSize',12);
这个代码一开始出现的图片是这样的
x10、3这两个文本经过大小字体位置调整,效果就会变成第一章图的样子。
PS: 这个方法其实是和一个优秀的师姐学的,因为觉得很好用就拿来主义了,哈哈。
3 如何双坐标轴并给两坐标轴分别设置范围和颜色
我在图片窗口的设置里没有找到对双坐标轴格式很详细的调整方式,所以需要使用代码提前设置好左右坐标轴的范围和颜色。采用 “yyaxis left” 和 “yyaxis right” 设置左右坐标轴,采用 colororder 设置两坐标轴颜色,采用"ylim"设置坐标轴范围,具体代码如下:
% R7 和 CPI走势
R7 = xlsread('liupengyu004.xlsx','shangzheng_bsadf_defla_sa','Q8:Q256');
CPI = xlsread('liupengyu004.xlsx','shangzheng_bsadf_defla_sa','S8:S256');
t_end=2022+2/12;
xxxx0=2001.50:1/12:t_end;
colororder({'k','k'})
yyaxis left
plot(xxxx0,R7)
ylim([0 8])
yyaxis right
plot(xxxx0,CPI)
legend('R7(左)','CPI(右)','Location','NorthWest','FontSize',8);
ylim([0.95 1.15])
具体效果如下:
这两条线都是实线所以看着有些乱,可通过属性栏自行调整线的格式。
corlororder 使用的颜色代码如下
4 图例如何只显示想要的曲线
我们平时使用的曲线图往往很复杂,比如脉冲响应图不仅有脉冲响应曲线,还包含置信区间等等,这时候使用 Matlab 图片窗口直接插入图例可能会显示很多非脉冲响应曲线的奇奇怪怪的线条,这里给出如何通过使用 legend 使图中仅显示想要曲线的代码:
x=1:5;
y1=sin(x);
y2=cos(x);
yL_1=plot(x,y1)
hold on
yL_2=plot(x,y2)
legend([yL_2],'B') %图例仅显示 y2 曲线并将该线命名为 B
%legend([yL_1 yL_2],{'A','B'}) %两条线都在图例里显示并分别命名为 A 和 B
如果想显示两条曲线的图例,将最后一行代码的段首百分号去掉,并将倒数第二行代码段首加上百分号变为注释即可。
5 图的标题无法显示中文怎么办
原因在于 Matlab 有时候无法用英文字体显示中文,在属性窗口里把对应位置的字体调成宋体即可。
6 画出来的图太大,插入word后缩小了看不清数字怎么办
直接把图片窗口缩小,Matlab 很人性化,图片窗口缩小后,数字却依然大小保持能看清的状态,先看看你需要多大的图片,然后把图片窗口拖到类似的比例或者大小即可。
7 数据有缺失值想要画图怎么办?
采用 NaN 代替缺失值,具体代码及效果如下:
x=1:5;
x(3)=NaN; %将 x 第 3 个元素变为缺失值
y1=sin(x);
y2=cos(x);
x
y1
y2
yL_1=plot(x,y1)
hold on
yL_2=plot(x,y2)
legend([yL_1 yL_2],{'A','B'}) %两条线都在图例里显示并分别命名为 A 和 B
可以看到只有第三个点没有画。
8 如何删除矩阵的某一行 or 列?
话不多说放代码:
A=[1 3;2 4;5 7;6 9];
A
size(A)
A(2,:)=[]; %删除第2行
A
size(A)
输出结果如下:
9 如何在X轴某个日期画竖线?
画图的上下边画两点连线即可,举例代码和效果如下:
dates = [1986;1986+8/12;1990+7/12;1991+1/12;2007;2009;2014+5/12;2015];
dates = repmat(dates,1,2);
plot([dates(2,:)],[0 60])
以上,作为笔记,也希望能帮上一些和我一样遇到这些小问题朋友的忙。如有更好更科学简便的方法,欢迎不吝赐教!