局部放大_局部放大图或细节图

局部放大_局部放大图或细节图_第1张图片

首发公众号:120701101

从自学者的角度讲起。如果感兴趣,可以及时关注,咱们一起进步。

公众号中可以获取大量的学习资料。


一、代码

% 创建局部放大图

syms x 
f = 1/(1 + x^2) + 1/(1 + 10*[1 + 10*(3-x)]^2);

fig = gcf;

ax1 = axes('Position', [0.15 0.15 0.7 0.7]);
ax2 = axes('Position',[0.55 0.5 0.28 0.28]);

axes(ax1)
ax1.XLim = [-4, 12];
ax1.YLim = [0, 1.2];

hold on

p1 = fplot(f);
p1.LineWidth = 1;
p1.Color = 'r';
p2 = plot([2.5, 2.5], [0, 0.3]);
p2.LineStyle = ":";
p2.Color = 'k';
p3 = plot([3.5, 3.5], [0, 0.3]);
p3.LineStyle = ":";
p3.Color = 'k';
xlabel('$$ x $$', 'interpreter', 'latex')
ylabel('$$ f(x) $$', 'interpreter', 'latex')
x_an = [.5, .4];
y_an = [.35, .3];
annotation('arrow',x_an, y_an);
str = '$$ f(x) = frac{1}{1 + x^2} + (frac{1}{10[1+ 10(3 - x)]^2}$$';
text(1.5, .41, str, 'interpreter', 'latex');
title('局部细节图', 'fontsize', 12)

axes(ax2)
p4 = fplot(f, [2.4, 3.6]);
p4.LineWidth = 1;
p4.Color = 'k';
xlabel('$$ x $$', 'interpreter', 'latex')
ylabel('$$ f(x) $$', 'interpreter', 'latex')

效果如下:

局部放大_局部放大图或细节图_第2张图片

二、解读

其实说穿了,最主要的就是用Axes的属性。最好自己动手看一下帮助文档理解理解其中的奥义。

然后就是分别绘制几条线,其中符号函数绘制的图,和离散数据绘制图的命令不一样。

我个人觉得最繁琐的地方并不是绘制这几条线,而是调整figure图框、axes坐标轴以及文本注释箭头和文字等的位置。如果你平时的多绘制了这一类的图,可以直接套用你的位置模板。

三、资源共享

源码使用的软件版本:MATLAB R2019b。

你可能感兴趣的:(局部放大)