
文章目录
使用场景
极坐标气泡图( P o l a r B u b b l e C h a r t Polar Bubble Chart PolarBubbleChart)将极坐标系与气泡图结合,适用于以下场景:
- 方向性数据分析:如雷达探测信号强度随方位角的分布、风向与风速统计
- 循环周期数据:如 24 小时内各时段的流量大小、一年中各月份的降水量分布
- 多维空间数据可视化:用角度表示方向、半径表示距离/强度、气泡大小表示第三维度(如信号质量、样本数量)
- 导航与定位领域:如卫星仰角-方位角分布图( S k y P l o t Sky Plot SkyPlot)、传感器覆盖范围评估
典型应用:GNSS 卫星天空视图、声呐/雷达扫描结果、风场分析、天线辐射方向图等。
绘图方法
MATLAB 中绘制极坐标气泡图主要有两种方式:
方法一:使用 bubblechart+polaraxes(推荐,R2020b+)
pax = polaraxes;
bubblechart(pax, theta, rho, sz, c);
| 参数 | 说明 |
|---|---|
theta | 角度数据(单位:弧度) |
rho | 半径数据 |
sz | 气泡大小(标量或向量) |
c | 气泡颜色(RGB 三元组 或 颜色向量) |
方法二:使用scatter+polaraxes(兼容旧版本)
polaraxes;
polarscatter(theta, rho, sz, c, 'filled');
polarscatter是scatter的极坐标版本,气泡大小由sz控制,支持颜色映射。
使用示例
示例 1:基础极坐标气泡图
clc; clear; close all;
rng(0);
% 生成随机数据
N = 30;
theta = 2 * pi * rand(1, N); % 随机角度 [0, 2π]
rho = 5 * rand(1, N); % 随机半径 [0, 5]
sz = 100 * rand(1, N) + 20; % 气泡大小 [20, 120]
c = rand(1, N); % 颜色映射值
% 绘图
figure;
pax = polaraxes;
polarscatter(pax, theta, rho, sz, c, 'filled');
% 设置颜色映射
colormap(pax, 'jet');
colorbar;
% 标题
title('基础极坐标气泡图');

效果说明:气泡位置由 (theta, rho) 决定,气泡大小反映第三维度,颜色反映第四维度。
示例 2:GNSS 卫星天空视图(Sky Plot)
clc; clear; close all;
rng(0);
% 模拟卫星数据
% 仰角 el (°) → 半径 = 90 - el(仰角越高,越靠近圆心)
az = deg2rad([30, 75, 120, 200, 310, 45, 260, 155]); % 方位角(弧度)
el = [70, 45, 30, 60, 80, 25, 50, 35]; % 仰角(°)
cn0 = [42, 38, 31, 45, 48, 28, 36, 33]; % 信噪比 C/N0 (dB-Hz)
rho = 90 - el; % 半径 = 余仰角
sz = (cn0 - 20) * 8; % 气泡大小与信噪比正相关
% 绘图
figure;
pax = polaraxes;
polarscatter(pax, az, rho, sz, cn0, 'filled', ...
'MarkerEdgeColor', 'k', 'LineWidth', 0.8);
% 坐标轴设置:仰角标注
pax.ThetaZeroLocation = 'top'; % 0° 在顶部(正北方向)
pax.ThetaDir = 'clockwise'; % 顺时针方向(地理习惯)
pax.RLim = [0, 90];
pax.RTick = [0, 30, 60, 90];
pax.RTickLabel = {'90°', '60°', '30°', '0°'}; % 仰角标注
% 颜色条与标题
colormap('parula');
cb = colorbar;
cb.Label.String = 'C/N0 (dB-Hz)';
title('GNSS 卫星天空视图 (Sky Plot)');

说明:
- 角度方向设置为顺时针、0° 朝上,符合地理方位习惯
- 半径使用余仰角,仰角越高气泡越靠近圆心
- 气泡大小与信噪比成正比,颜色同样编码信噪比
进阶使用
1. 自定义气泡颜色与透明度
% 使用 RGBA 风格:设置透明度
h = polarscatter(pax, theta, rho, sz, c, 'filled');
h.MarkerFaceAlpha = 0.6; % 填充透明度
h.MarkerEdgeColor = 'none'; % 去除边框
2. 添加文字标注
% 在每个气泡旁标注编号
for i = 1:length(theta)
[x, y] = pol2cart(theta(i), rho(i));
text(x, y, sprintf('S%d', i), ...
'FontSize', 8, 'HorizontalAlignment', 'center');
end
注意:
polaraxes环境下文字标注需先转换为笛卡尔坐标。
3. 多组数据叠加绘图
figure;
pax = polaraxes;
hold(pax, 'on');
% 第一组:GPS 卫星
polarscatter(pax, az_gps, rho_gps, sz_gps, 'b', 'filled', ...
'DisplayName', 'GPS');
% 第二组:BDS 卫星
polarscatter(pax, az_bds, rho_bds, sz_bds, 'r', 'filled', ...
'DisplayName', 'BDS');
legend('Location', 'southoutside', 'Orientation', 'horizontal');
title('多星座卫星天空视图');
hold(pax, 'off');
4. 动态更新(实时绘图)
figure;
pax = polaraxes;
pax.ThetaZeroLocation = 'top';
pax.ThetaDir = 'clockwise';
h = polarscatter(pax, [], [], [], []); % 空图句柄
for t = 1:100
% 模拟实时数据更新
theta_new = 2 * pi * rand(1, 20);
rho_new = 5 * rand(1, 20);
sz_new = 50 * rand(1, 20) + 10;
h.ThetaData = theta_new;
h.RData = rho_new;
h.SizeData = sz_new;
title(sprintf('实时极坐标气泡图 帧: %d', t));
drawnow limitrate;
pause(0.1);
end
5. 导出高清图像
% 导出为 300 DPI PNG
exportgraphics(gcf, 'polar_bubble.png', 'Resolution', 300);
% 导出为矢量 PDF
exportgraphics(gcf, 'polar_bubble.pdf', 'ContentType', 'vector');
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者
406

被折叠的 条评论
为什么被折叠?



