前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >matlab绘图(五)

matlab绘图(五)

作者头像
巴山学长
发布2020-02-17 15:08:53
发布2020-02-17 15:08:53
1.2K00
代码可运行
举报
文章被收录于专栏:巴山学长巴山学长
运行总次数:0
代码可运行

过冷水有段时间没有和大家分享MATLAB的编程知识了,皆因懒。本期给大家分享一点关于绘图的小技巧,经常有朋友让我帮忙绘图,感觉在我这里是小事,在他们那就是很特别的技能,有时候朋友的特殊绘制要求,也让我犯难。现将自己平时的绘图经验做个小结,主要是关于matlab绘图的一些注意点——公式输入、多轴绘图、交点标记、箭头绘制,通过实际案例给大家讲讲具体的使用。

这幅图是过冷水本科期间老师让画的一幅图,具体含义就不给大家讲了。这幅图的不同之处在于:

一、四个方向都有坐标,这在平常绘图中是很少见的。

二、上下坐标、左右坐标的坐标轴方向都是相反的,大小变化形式不同。

解决问题一的诀窍在于坐标轴的叠加,这幅图可以理解为三个坐标轴叠加调整得到。

坐标轴叠加的命令;

代码语言:javascript
代码运行次数:0
运行
复制
hl=gca;%获得当前轴的句柄
h2=axes('position',get(hl,'position'));

问题二我们需要解决的是如何把三个原点为左下方的坐标轴修改成如图所示的四方都有坐标轴的形式。

可用以下几个命令实现

代码语言:javascript
代码运行次数:0
运行
复制
axis('ij',[])%坐标轴原点设为左上方;
set(axis,'yaxislocation','right/left');%将Y坐标轴设置在右边/左边;
set(axis,'xaxislocation','botttom');%将x坐标轴设置在右边/左边;
set(axis,'x(y)dir','reverse');%将x/y坐标标注反转.

上图涉及到了核心绘图命令已经讲解完毕,完整绘图代码见文末,关于文本标记希腊字母的命令可以参考往期推文matlab绘图(二)

这幅图也是过冷水在学习过程中遇到的一幅图,MATLAB入门教程中是不会讲图示中的箭头绘制、交点标记、线条数学公式化标记的,恰好这些都有较强的实用行,就和大家分享一下。

一、箭头绘制我们可以使用命令

代码语言:javascript
代码运行次数:0
运行
复制
annotation(figure,'arrow',[x_begin,x_end],[y_begin,y_end]);

二、线条/文本公式化标记的命令为

代码语言:javascript
代码运行次数:0
运行
复制
text('FontSize',16,'FontName','Times New Roman','Interpreter','latex','String','$$y_1=100(\frac{x}{200})^3\int_{0}^{\frac{200}{x}}\frac{t^4e^t}{(e^t-1)^2}dt$$');
legend(axes1,'$y_1=100(\frac{x}{200})^3\int_{0}^{\frac{200}{x}}\frac{t^4e^t}{(e^t-1)^2}dt$');
set(legend,'Interpreter','latex');

以上两个命令字符串书写部分有微小的差别,读者自行观察。图例需要通过设置才能显示特殊形式,而文本则不需要,这一点需要注意。

在matlab中要表现较为复杂的符号或者公式需要用特有格式,常见的格式有如下:

三、给大家讲有特色的自动点标记的技巧,在实际绘图我们经常更直观的展示特殊点的信息需要标记,MATLAB中是没有自动标记点的命令可以调用的,命令需自编。

代码语言:javascript
代码运行次数:0
运行
复制
[m_one,n_one]=find(abs(y1-y2)==min(abs(y1-y2)));%特殊点的坐标识别,本文取交点的坐标;
m=T(m_one,n_one);n=y1(m_one,n_one);%读取交点对应的X,Y数值
str = ['min(' num2str(m) ',' num2str(n) ')'];%对数值进行符号化;
text(m,n,str);%文本标记

过冷水想和大家分享的绘图小技巧就这么多,若是觉得公众号分享的绘图技巧有用,持续关注MATLAB爱好者,公众号将会持续不断给大家推送更多实用知识。读者也可查看往期绘图推文,查找所需信息。

图一代码:

代码语言:javascript
代码运行次数:0
运行
复制
clear all
beta(1,:)=linspace(2.4,20.5,100);beta(2,:)= 0.00992*beta(1,:).^3 -0.8402 *beta(1,:).^2 + 20.06*beta(1,:)-49.2%根据X低 Y左绘制
lambda(1,:)=linspace(2.4,90.31,100);lambda(2,:) = 84.63*exp(0.001372 *lambda(1,:))-118.3 *exp(-0.1065*lambda(1,:))%根据X低 Y左绘制
theta(1,:)=linspace(90.3,20.5,100); theta(2,:)=-0.0006744*theta(1,:).^3 + 0.1337*theta(1,:).^2 -9.162*theta(1,:) + 235.2;%根据X低右绘制
delta(1,:)=linspace(1.3,1.9,100);delta(2,:)= 1134*delta(1,:).^3 -5792*delta(1,:).^2 + 9851*delta(1,:) -5496;%根据X上 左绘制。
epsilon(1,:)=linspace(1.4,1.9,100); epsilon(2,:)=-1434 *epsilon(1,:).^3 + 7553 *epsilon(1,:).^2 -13250*epsilon(1,:) + 7749 ;%根据X上 左绘制。
beta(1,:)=linspace(2.4,20.5,100);beta(2,:)= 0.00992*beta(1,:).^3 -0.8402 *beta(1,:).^2 + 20.06*beta(1,:)-49.2%根据X低 Y左绘制
lambda(1,:)=linspace(2.4,90.31,100);lambda(2,:) = 84.63*exp(0.001372 *lambda(1,:))-118.3 *exp(-0.1065*lambda(1,:))%根据X低 Y左绘制
theta(1,:)=linspace(90.3,20.5,100); theta(2,:)=-0.0006744*theta(1,:).^3 + 0.1337*theta(1,:).^2 -9.162*theta(1,:) + 235.2;%根据X低右绘制
delta(1,:)=linspace(1.3,1.9,100);delta(2,:)= 1134*delta(1,:).^3 -5792*delta(1,:).^2 + 9851*delta(1,:) -5496;%根据X上 左绘制。
epsilon(1,:)=linspace(1.4,1.9,100); epsilon(2,:)=-1434 *epsilon(1,:).^3 + 7553 *epsilon(1,:).^2 -13250*epsilon(1,:) + 7749 ;%根据X上 左绘制。
X1= lambda(1,:);Y1= lambda(2,:);
X2=beta(1,:); Y2=beta(2,:); 
X3=theta(1,:);Y3=theta(2,:); 
X4=delta(1,:); Y4=delta(2,:); 
X5=epsilon(1,:);Y5=epsilon(2,:);
% 创建 figure
figure1 = figure;
% 创建 axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');
% 创建 plot
plot(X1,Y1,'Parent',axes1,'LineWidth',3,'Color',[1 0 1]);
plot(X2,Y2,'Parent',axes1,'LineWidth',3,'Color',[1 0 0]);
% 创建 text
text('Parent',axes1,'FontWeight','bold','FontSize',20,'FontName','榛戜綋','String','β', 'Position',[17 85 0],'Color',[1 0 0]);
text('Parent',axes1,'FontWeight','bold','FontSize',20,'FontName','榛戜綋','String','λ','Position',[15.1420454545455 57 0],'Color',[1 0 1]);
% 创建 label
xlabel('X底','FontWeight','bold','FontName','榛戜綋');
ylabel('Y左','FontWeight','bold','FontName','榛戜綋');
axis(axes1,'ij',[0 100 0 100]);
% 设置其余坐标轴属性
set(axes1,'FontName','T榛戜綋','FontSize',11,'FontWeight','bold','LineWidth',2);
% 创建 axes
axes2 = axes('Parent',figure1,'Position',get(axes1,'position'));
hold(axes2,'on');
% 创建 plot
plot(X3,Y3,'Parent',axes2,'LineWidth',3,'Color',[0 0.498039215803146 0]);
% 创建 text
text('Parent',axes2,'FontWeight','bold','FontSize',20,'FontName','Times New Roman','String','θ','Position',[33 65 0],'Color',[0 0.498039215803146 0]);
% 创建 ylabel
ylabel('Y右','FontWeight','bold','FontName','榛戜綋');
set(axes2,'Color','none','FontName','榛戜綋','FontSize',11,'FontWeight','bold','Layer','top','LineWidth',2,'XTickLabel',[],'YAxisLocation','right','ylim',[0 100],'xlim',get(axes1,'xlim'),'layer','top');                                                  
% 创建 axes
axes3 = axes('Parent',figure1,'Position',get(axes2,'position'));
hold(axes3,'on');
% 创建 plot
plot(X4,Y4,'Parent',axes3,'LineWidth',3,'Color',[0 0.749019622802734 0.749019622802734]);
% 创建 plot
plot(X5,Y5,'Parent',axes3,'LineWidth',3,'Color',[0.0784313753247261 0.168627455830574 0.549019634723663]);
% 创建 text
text('Parent',axes3,'FontWeight','bold','FontSize',20, 'FontName','Times New Roman','String','ε','Position',[1.47 25 0],'Color',[0.0784313753247261 0.168627455830574 0.549019634723663]);
text('Parent',axes3,'FontWeight','bold','FontSize',20,'FontName','Times New Roman','String','δ','Position',[1.48 65 0],'Color',[0 0.749019622802734 0.749019622802734]);
% 创建 label
xlabel('X上','FontWeight','bold','FontName','榛戜綋');
% 设置其余坐标轴属性
axis('ij',[1.2 2.2 0 100]);
set(axes3,'Color','none','FontName','榛戜綋','FontSize',11,'FontWeight','bold','LineWidth',2,'MinorGridAlpha',0,'XAxisLocation','top','XDir','reverse','YDir','reverse');

图二代码:

代码语言:javascript
代码运行次数:0
运行
复制
clear all
T=linspace(1,300,301);TTheta=200;
X=T./TTheta;
syms x
for i=1:length(T);
    f=(x^4*exp(x))/(exp(x)-1)^2;
    y(i)=vpa(int(f,0,1/X(i)));
end
y1=100*X.^3.*y; y2=32 *exp(-0.009*T);
% 创建 figure
figure1 = figure;
% 创建 axes
axes1 = axes('Parent',figure1,'Position',[0.13 0.11 0.8 0.8]);
hold(axes1,'on');
% 使用 plot 的矩阵输入创建多行
plot1 = plot([T',T'],[y1',y2'],'MarkerSize',4,'LineWidth',3);
[m_one,n_one]=find(abs(y1-y2)==min(abs(y1-y2)));
m=T(m_one,n_one);n=y1(m_one,n_one);
plot(m,n,'DisplayName','point of intersection','MarkerSize',15,'Marker','*','LineWidth',1.5,'LineStyle','none','Color',[0 0 1]);
str = ['min(' num2str(m) ',' num2str(double(n)) ')'];
text(m+(max(max(T))-min(min(T)))/20,double(n),str,'FontSize',14,'fontname','楷体','Color','red');
set(plot1(1),'DisplayName','$y_1=100(\frac{{x}}{{200}})^3\int_{0}^{\frac{200}{x}}\frac{t^4e^t}{(e^t-1)^2}dt$','Color',[0 1 0]);
set(plot1(2),'DisplayName','$y_2=32e^{-0.0009x}$','Color',[1 0 0]);
% 创建 text
text('Parent',axes1,'FontSize',16,'FontName','Times New Roman','Interpreter','latex','String','$$y_1=100(\frac{x}{200})^3\int_{0}^{\frac{200}{x}}\frac{t^4e^t}{(e^t-1)^2}dt$$','Position',[46.9991855344689 33.1666666666666 0]);
text('Parent',axes1,'FontSize',16,'FontName','Times New Roman','Interpreter','latex','String','$$y_2=32*e^{(-0.009*T)}$$','Position',[145.013292545108 2.76041666666663 0]);
% 创建 label
xlabel('x','Interpreter','latex');
ylabel('y','FontWeight','bold','FontAngle','italic','FontSize',16,'Interpreter','latex');
% 设置其余坐标轴属性
set(axes1,'FontName','Times New Roman','FontSize',14,'FontWeight','bold');
% 创建 legend
legend1 = legend(axes1,'show');
set(legend1,'Position',[0.648925402268424 0.551324366319492 0.270547511347975 0.191242604715349],'Interpreter','latex','FontSize',20,'FontWeight','normal');
% 创建 arrow
annotation(figure1,'arrow',[0.13 0.97],[0.11 0.11],'LineWidth',2);
annotation(figure1,'arrow',[0.13 0.13],[0.11 0.95],'LineWidth',2);

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档