Matlab技术问题:如何在单个X轴标签下绘制两列Excel数据的箱线图
在Matlab中实现单X轴下两列数据的箱线图对比
需求说明
将Excel表格(.xls)中的两列数据“Data1”和“Data2”,在单个X轴标签“Jan”下绘制箱线图,实现两组数据的可视化对比。现有一段多子图箱线图代码,需调整为单轴双箱线图效果。
解决方案
步骤1:读取Excel数据
使用readtable读取目标Excel文件,直接提取需要的列数据:
% 替换为你的Excel文件路径 surveyData = readtable('你的数据文件.xls'); % 提取两组目标数据 data1 = surveyData.Data1; data2 = surveyData.Data2;
步骤2:构造单X轴分组结构
为让两组数据对应同一个X轴标签“Jan”,构造全为“Jan”的分类变量,并合并两组数据:
% 生成与数据长度一致的分类X轴标签 xAxis = categorical(repmat("Jan", length(data1), 1)); % 合并两组数据为矩阵(需确保两组数据行数相同) combinedData = [data1, data2];
步骤3:绘制单轴双箱线图
调用boxchart绘制,并沿用你现有代码的Y轴刻度自定义逻辑:
figure; % 在同一个X标签下绘制两组数据的箱线图 ax = boxchart(xAxis, combinedData); % 设置X轴标签 xlabel('Jan'); % 自定义Y轴刻度(与原代码逻辑对齐) ScoreS = [-3, -2, -1, 0, 1, 2, 3]; yt = get(gca, 'YTick'); ytx = linspace(min(yt), max(yt), numel(ScoreS)); ytl = sprintfc('%.0f',ScoreS); set(gca, 'YTick', ytx, 'YTickLabel', ytl); ylabel('评分'); % 添加图例,标注样本量 legend(['Data1 (N=', num2str(length(data1)), ')'], ['Data2 (N=', num2str(length(data2)), ')']); % 优化布局 grid on; tightlayout;
关键说明
boxchart支持在同一分类下绘制多组数据的箱线图,只需传入多列数据矩阵即可。- 分类变量
xAxis确保所有数据点都映射到“Jan”这个X轴标签,实现单X轴对比效果。 - Y轴刻度部分完全复用你原代码的逻辑,保证样式一致性。
内容的提问来源于stack exchange,提问作者zeeslime
相关产品推荐
相关产品推荐

