如何将给定的CoverageArea向量表示为箱线图?技术咨询
思路与实现方案
1. 数据适配性分析
你现有的数据只有每个位置的最小值(min)、平均值(mean)、最大值(max),没有单个样本的原始数据,不适合绘制传统箱线图(传统箱线图需要基于样本计算四分位数、中位数等统计量)。更适合绘制带误差线的分组图,来展示每个数据点的取值范围和中心趋势,效果可以和你想要的示例图风格一致。
2. 数据对应关系梳理
你的x向量是[15 15 30 30 45 45 60 60],对应8个数据位置,每个x值(15、30、45、60)各有两组数据,每组数据对应CoverageArea_min、CoverageArea_mean、CoverageArea_max的一个元素:
- x=15的两组:第1、2个位置的min/mean/max
- x=30的两组:第3、4个位置的min/mean/max
- x=45的两组:第5、6个位置的min/mean/max
- x=60的两组:第7、8个位置的min/mean/max
3. 具体实现代码(Matlab为例)
用errorbar函数绘制带误差线的分组图,区分每组样式避免重叠:
% 原始数据 CoverageArea_mean = [84.4735,0,21.1779,4.5211,6.4247,2.3795,2.1416,0]; CoverageArea_min = [98.5128,92.5640,21.1779,21.1779,6.9007,6.9007,2.1416,2.1416]; CoverageArea_max = [70.1963,0,19.0363,0.4759,5.9488,0.2380,2.1416,0]; x = [15 15 30 30 45 45 60 60]; % 给每组数据添加x轴偏移,避免重叠 x_offset = [-0.8, 0.8, -0.8, 0.8, -0.8, 0.8, -0.8, 0.8]; x_adjusted = x + x_offset; figure; hold on; % 绘制第一组数据(每个x值的第一个数据点) errorbar(x_adjusted(1:2:end), CoverageArea_mean(1:2:end), ... CoverageArea_mean(1:2:end)-CoverageArea_min(1:2:end), ... CoverageArea_max(1:2:end)-CoverageArea_mean(1:2:end), ... 'o-', 'LineWidth',1.5, 'MarkerSize',8); % 绘制第二组数据(每个x值的第二个数据点) errorbar(x_adjusted(2:2:end), CoverageArea_mean(2:2:end), ... CoverageArea_mean(2:2:end)-CoverageArea_min(2:2:end), ... CoverageArea_max(2:2:end)-CoverageArea_mean(2:2:end), ... 's--', 'LineWidth',1.5, 'MarkerSize',8); % 配置图表样式 xlabel('X轴标签'); ylabel('Coverage Area'); xticks([15,30,45,60]); legend('分组1', '分组2'); grid on; hold off;
4. 模拟箱线图视觉样式(可选)
如果要贴近箱线图的矩形区间样式,可以用矩形绘制min到max的范围,红线标记平均值:
figure; hold on; bar_width = 1.2; for i = 1:length(x) % 绘制取值范围矩形 rectangle('Position', [x(i)-bar_width/2, CoverageArea_min(i), bar_width, CoverageArea_max(i)-CoverageArea_min(i)], ... 'FaceColor', [0.8,0.8,0.8], 'EdgeColor','k'); % 绘制平均值水平线 line([x(i)-bar_width/2, x(i)+bar_width/2], [CoverageArea_mean(i), CoverageArea_mean(i)], ... 'Color','r', 'LineWidth',2); end xticks([15,30,45,60]); xlabel('X轴标签'); ylabel('Coverage Area'); grid on; hold off;
内容的提问来源于stack exchange,提问作者SH_IQ
相关产品推荐
相关产品推荐

