【MATLAB绘图讲解】极坐标气泡图(polarscatter函数)使用场景、示例和进阶教程

在这里插入图片描述

使用场景

极坐标气泡图( 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');

polarscatterscatter 的极坐标版本,气泡大小由 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');

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB卡尔曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值