Matlab通过函数绘制等高线图fcontour

4.3
(3)

今天给各位带来关于Matlab绘制等高线图中的最后一篇系列文章,实用fcontour函数来绘制已知函数或方程的等高线图。本文主要讲解关于fcontour函数的常见用法、语法说明、绘制函数的等高线、指定绘图区间并绘制分段等高线图、更改线型和线宽、绘制多个函数的等高线图、创建后修改等高线图、填充等高线之间的区域、指定等高线的级别、控制等高线的分辨率以及添加标题和轴标签以及格式化刻度等。

Matlab通过函数绘制等高线图fcontour

下面,我们首先给出Matlab中关于fcontour函数的帮助文档如下:

>> help fcontour
 fcontour   Plot function contour lines
    fcontour(F) plots contour lines of F(X,Y) over the axes size,
    with a default range of -5 < X < 5, -5 < Y < 5.
 
    fcontour(F,[XYMIN XYMAX]) plots over XYMIN < X < XYMAX, XYMIN < Y < XYMAX.
    fcontour(F,[XMIN XMAX YMIN YMAX]) plots over XMIN < X < XMAX, YMIN < Y < YMAX.
 
    H = fcontour(...) returns a handle to the function contour object created by fcontour.
 
    fcontour(...,'LineSpec') plots with the given line specification.
 
    fcontour(AX,...) plots into the axes AX instead of the current axes.
 
    Examples:
        fcontour(@(x,y) x.^2+y.^2)
        fcontour(@(x,y) sin(x).*cos(y),[-2*pi,2*pi],'MeshDensity',121)

常见用法

fcontour(f)
fcontour(f,xyinterval)
fcontour(___,LineSpec)
fcontour(___,Name,Value)
fcontour(ax,___)
fc = fcontour(___)

语法说明

fcontour(f) 根据 x 和 y 的默认区间 [-5 5] 和 z 的固定级别值绘制 z = f(x,y) 函数的等高线。

fcontour(f,xyinterval) 将在指定区间绘图。要对 x 和 y 使用相同的区间,请将 xyinterval 指定为 [min max] 形式的二元素向量。要使用不同的区间,请指定 [xmin xmax ymin ymax] 形式的四元素向量。

fcontour(___,LineSpec) 设置等高线的线型和颜色。例如,’-r’ 指定红色线条。在前面的任何输入参数组合之后使用此选项。

fcontour(___,Name,Value) 使用一个或多个名称-值对组参数指定线条属性。

fcontour(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区中。

fc = fcontour(___) 返回 FunctionContour 对象。可使用 fc 查询和修改特定 FunctionContour 对象的属性。

绘制函数的等高线

在 −5<x<5 和 −5<y<5 的默认区间绘制 f(x,y)=sin(x)+cos(y) 的等高线。

f = @(x,y) sin(x) + cos(y);
fcontour(f)
Matlab通过函数绘制等高线图fcontour

指定绘图区间并绘制分段等高线图

指定绘图区间作为 fcontour 的第二个参数。在相同坐标区的不同区间绘制多个输入时,坐标轴范围会调整以显示所有数据。这种行为可以让您绘制分段输入。

绘制分段输入

erf(x)+cos(y)−5<x<0
sin(x)+cos(y)0<x<5

区间为 −5<y<5。

fcontour(@(x,y) erf(x) + cos(y),[-5 0 -5 5])
hold on
fcontour(@(x,y) sin(x) + cos(y),[0 5 -5 5])
hold off
grid on
Matlab通过函数绘制等高线图fcontour

更改线型和线宽

以线宽为 2 的虚线绘制 x2−y2 的等高线。

f = @(x,y) x.^2 - y.^2;
fcontour(f,'--','LineWidth',2)
Matlab通过函数绘制等高线图fcontour

绘制多个函数的等高线图

使用 hold on 在相同的坐标区上绘制 sin(x)+cos(y) 和 x−y。

fcontour(@(x,y) sin(x)+cos(y))
hold on
fcontour(@(x,y) x-y)
hold off
Matlab通过函数绘制等高线图fcontour

创建后修改等高线图

绘制 e−(x/3)^2−(y/3)^2+e−(x+2)^2−(y+2)^2 的等高线。将函数等高线对象指定给变量。

f = @(x,y) exp(-(x/3).^2-(y/3).^2) + exp(-(x+2).^2-(y+2).^2);
fc = fcontour(f)
Matlab通过函数绘制等高线图fcontour

输出结果为:

fc = 

  FunctionContour (具有属性):

     Function: @(x,y)exp(-(x/3).^2-(y/3).^2)+exp(-(x+2).^2-(y+2).^2)
    LineColor: 'flat'
    LineStyle: '-'
    LineWidth: 0.5000
         Fill: 'off'
    LevelList: [0.2000 0.4000 0.6000 0.8000 1 1.2000 1.4000]

通过使用圆点表示法设置函数等高线对象的属性,可以将线宽更改为 1,将线型更改为虚线。通过设置 LevelList 属性,可以显示靠近 0 和 1 的等高线。添加颜色栏。

fc.LineWidth = 1;
fc.LineStyle = '--';
fc.LevelList = [1 0.9 0.8 0.2 0.1];
colorbar
Matlab通过函数绘制等高线图fcontour

填充等高线之间的区域

通过填充下列方程的等高线之间的区域,创建看起来像日落的绘图:

erf((y+2)3)−e(−0.65((x−2)^2+(y−2)^2)).

f = @(x,y) erf((y+2).^3) - exp(-0.65*((x-2).^2+(y-2).^2));
fcontour(f,'Fill','on');
Matlab通过函数绘制等高线图fcontour

如果要改为插补着色,请使用 fsurf 函数,并将其 ‘EdgeColor’ 选项设置为 ‘none’,后跟命令 view(0,90)。

指定等高线的级别

使用 ‘LevelList’ 选项设置 fcontour 绘制等高线时所用的级别。

f = @(x,y) sin(x) + cos(y);
fcontour(f,'LevelList',[-1 0 1])
Matlab通过函数绘制等高线图fcontour

控制等高线的分辨率

使用 ‘MeshDensity’ 选项控制等高线的分辨率。增大 ‘MeshDensity’ 可以使绘图更圆滑、更准确,减小该值可以提高绘图速度。

在 2×1 分块图布局中创建两个绘图。在第一个绘图中,显示 sin(x)sin(y) 的等高线。方形的角不重合。要解决此问题,请将第二个绘图中的 ‘MeshDensity’ 增大到 200。现在的角彼此重合,这说明增大 ‘MeshDensity’ 可以提高分辨率。

f = @(x,y) sin(x).*sin(y);
tiledlayout(2,1)
nexttile
fcontour(f)
title('Default Mesh Density (71)')

nexttile
fcontour(f,'MeshDensity',200)
title('Custom Mesh Density (200)')

由于我用的是Matlab 2016版本,没有tiledlayout以及nexttile函数,这里我用subplot函数来绘制分区图片,结果是一样的,修改后的代码如下:

f = @(x,y) sin(x).*sin(y);

subplot(2,1,1)
fcontour(f)
title('Default Mesh Density (71)')

subplot(2,1,2)
fcontour(f,'MeshDensity',200)
title('Custom Mesh Density (200)')
Matlab通过函数绘制等高线图fcontour

添加标题和轴标签以及格式化刻度

绘制 xsin(y)−ycos(x)。显示网格线、添加标题、添加轴标签。

fcontour(@(x,y) x.*sin(y) - y.*cos(x), [-2*pi 2*pi], 'LineWidth', 2);
grid on
title({'xsin(y) - ycos(x)','-2\pi &lt; x &lt; 2\pi and -2\pi &lt; y &lt; 2\pi'})
xlabel('x')
ylabel('y')
Matlab通过函数绘制等高线图fcontour

通过设置坐标区对象的 XTickLabel 和 XTick 属性设置 x 轴刻度值和关联的标签。使用 gca 访问坐标区对象。按照同样的方式设置 y 轴刻度值和关联的标签。

ax = gca;
ax.XTick = ax.XLim(1):pi/2:ax.XLim(2);
ax.XTickLabel = {'-2\pi','-3\pi/2','-\pi','-\pi/2','0','\pi/2','\pi','3\pi/2','2\pi'};
ax.YTick = ax.YLim(1):pi/2:ax.YLim(2);
ax.YTickLabel = {'-2\pi','-3\pi/2','-\pi','-\pi/2','0','\pi/2','\pi','3\pi/2','2\pi'};
Matlab通过函数绘制等高线图fcontour

共计3人评分,平均4.3

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/articles/1498.html

(3)
微信公众号
古哥的头像古哥管理团队
上一篇 2021年01月19日 22:40
下一篇 2021年01月21日 22:14

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号