Skip to content

MATLAB - 极坐标图

极坐标图(Polar Plot)在极坐标系中可视化数据,极坐标系由半径(rho)和角度(theta)定义,而不是笛卡尔 (x, y) 坐标系。这种表示对于具有固有方向性或周期性的数据特别有用。

常见应用:

  • 工程领域:可视化天线辐射方向图或麦克风拾音模式。
  • 物理学:表示矢量场和轨道力学。
  • 数据科学:分析周期性数据,例如每日网站流量或每月温度变化。

MATLAB 的现代图形系统提供了 polarplot 函数,这是一个灵活而强大的工具,用于创建高质量的极坐标可视化。

主要函数是 polarplot(theta, rho),其中 theta 是一个角度向量(以弧度为单位),rho 是一个包含相应半径的向量。

让我们绘制一个心形线(Cardioid),其方程为 rho = 1 + cos(theta)。

% 创建一个从 0 到 2*pi 的角度向量
theta = linspace(0, 2*pi, 200);
% 计算相应的半径
rho = 1 + cos(theta);
% 创建极坐标图
figure;
polarplot(theta, rho);

此代码会生成一个极坐标图窗口。结果图形是一个心形曲线,称为心形线。它关于水平轴对称,在 theta = 0 处具有最大半径 2,在 theta = pi 处半径为 0,形成尖点(收缩点)。

您可以使用 LineSpec 字符串(线型规范,一种定义线条样式、颜色和标记的字符串),类似于 plot 函数,来自定义线型、颜色和标记。如需更高级的控制,请使用名称-值对(Name-Value Pairs)。

让我们绘制一个四叶玫瑰线(Four-leaf rose)rho = sin(2*theta),使用粗的红色虚线和圆形标记。

theta = linspace(0, 2*pi, 200);
rho = sin(2 * theta);
% 使用 LineSpec 和名称-值对进行绘图
polarplot(theta, rho, '--ro', 'LineWidth', 2, 'MarkerFaceColor', 'y');

LineSpec 说明:

  • '--': 虚线
  • 'r': 红色
  • 'o': 圆形标记

名称-值对:

  • 'LineWidth', 2: 设置线宽。
  • 'MarkerFaceColor', 'y': 使用黄色填充标记。

输出是一个极坐标图,显示了一个带有四个“花瓣”或瓣的类似花朵的形状。线条是粗的红色虚线,带有黄色填充的圆形标记点,这些点用于绘制曲线。

您可以在同一极坐标轴上绘制多个数据集以进行比较。这可以通过两种主要方法实现。

方法 1:在 polarplot 中使用多个参数

Section titled “方法 1:在 polarplot 中使用多个参数”

在单个调用中提供多个 theta, rho, LineSpec 三元组。

theta = linspace(0, 2*pi, 200);
rho1 = sin(2 * theta); % 四叶玫瑰线
rho2 = cos(2 * theta); % 另一条四叶玫瑰线,旋转过
polarplot(theta, rho1, '-r', theta, rho2, '--b');

这会生成一个包含两个重叠形状的图:一个实心红色四叶玫瑰线和一个相对于第一个旋转 45 度的蓝色虚线四叶玫瑰线。

hold on 命令告诉 MATLAB 将后续绘图添加到当前坐标轴,而不是替换它们。这对于以编程方式构建复杂图很有用。

theta = linspace(0, 2*pi, 200);
rho1 = sin(2*theta);
rho2 = 0.5 + zeros(size(theta)); % 半径为 0.5 的圆
polarplot(theta, rho1, 'LineWidth', 2); % 绘制第一条线
hold on;
polarplot(theta, rho2, '--k'); % 在同一坐标轴上绘制第二条线
hold off; % 最佳实践是释放 hold

结果是包含前一个示例中的蓝色四叶玫瑰线的图,其上叠加了一个半径为 0.5 的黑色虚线圆。

一个好的图是标注清晰的图。使用 title、legend 和函数来调整坐标轴限制和刻度。

theta = linspace(0, 2*pi, 100);
rho1 = 2*sin(3*theta);
rho2 = 2*cos(3*theta);
polarplot(theta, rho1, theta, rho2);
% 增强绘图
title('Comparison of 3-Leaf Roses');
legend({'sin(3\theta)', 'cos(3\theta)'}, 'Location', 'bestoutside');
% 获取极坐标轴对象以自定义它
pax = gca;
pax.ThetaZeroLocation = 'top'; % 将 0 度设置为顶部
pax.ThetaDir = 'clockwise'; % 使角度按顺时针方向增加
pax.Rlim = [0 2.5]; % 设置半径限制

此代码创建了一个高度自定义的图,显示了两条三叶玫瑰线。标题和图例清晰地解释了内容。坐标轴经过修改,使 0 度角位于顶部(像指南针一样),角度按顺时针方向增加,并且径向轴延伸到 2.5,为曲线周围留出了一些空间。

目标:绘制简单半波偶极天线的辐射方向图。归一化功率强度由 rho = (cos(pi/2 * cos(theta)) / sin(theta))^2 给出。

% 使用一个小 epsilon 避免在 theta=0 和 pi 处出现除以零的情况
eps = 0.001;
theta = linspace(eps, 2*pi-eps, 200);
% 天线方向图公式
rho = (cos(pi/2 * cos(theta)) ./ sin(theta)).^2;
polarplot(theta, rho);
title('Half-Wave Dipole Antenna Radiation Pattern');
% 设置径向限制以聚焦主瓣
pax = gca;
pax.RLim = [0 1];

该项目将 polarplot 函数与真实的电气工程应用联系起来,展示了如何用它来理解天线在何处最有效地传输其功率(在 theta = pi/2 和 theta = 3pi/2 处的两个大波瓣)。