今天给各位带来关于Matlab绘制等高线图中的最后一篇系列文章,实用fcontour函数来绘制已知函数或方程的等高线图。本文主要讲解关于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)
指定绘图区间并绘制分段等高线图
指定绘图区间作为 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
更改线型和线宽
以线宽为 2 的虚线绘制 x2−y2 的等高线。
f = @(x,y) x.^2 - y.^2; fcontour(f,'--','LineWidth',2)
绘制多个函数的等高线图
使用 hold on 在相同的坐标区上绘制 sin(x)+cos(y) 和 x−y。
fcontour(@(x,y) sin(x)+cos(y)) hold on fcontour(@(x,y) x-y) hold off
创建后修改等高线图
绘制 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)
输出结果为:
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
填充等高线之间的区域
通过填充下列方程的等高线之间的区域,创建看起来像日落的绘图:
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');
如果要改为插补着色,请使用 fsurf 函数,并将其 ‘EdgeColor’ 选项设置为 ‘none’,后跟命令 view(0,90)。
指定等高线的级别
使用 ‘LevelList’ 选项设置 fcontour 绘制等高线时所用的级别。
f = @(x,y) sin(x) + cos(y); fcontour(f,'LevelList',[-1 0 1])
控制等高线的分辨率
使用 ‘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)')
添加标题和轴标签以及格式化刻度
绘制 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 < x < 2\pi and -2\pi < y < 2\pi'}) xlabel('x') ylabel('y')
通过设置坐标区对象的 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'};
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/1498.html