当前位置: 首页 > news >正文

箱线图(盒须图)QCPStatiBox

一、QCPStatisticalBox 概述

QCPStatisticalBox 是 QCustomPlot 中用于绘制箱线图(盒须图)的类,可以显示数据的五个关键统计量:最小值、第一四分位数(Q1)、中位数、第三四分位数(Q3)和最大值,以及可能的异常值。

二、主要属性

属性类型描述
widthdouble箱体的宽度(坐标轴单位)
whiskerWidthdouble须线的宽度(0-1表示比例)
penQPen箱线和须线的画笔属性
brushQBrush箱体填充的画刷属性
whiskerPenQPen须线的画笔属性
medianPenQPen中位线的画笔属性
outlierStyleQCPScatterStyle异常值的散点样式
nameQString箱线图名称(显示在图例中)
visiblebool是否可见
selectablebool是否可选择
selectedbool当前是否被选中

三、常用方法

1. 数据相关方法

方法参数返回值描述
setDatadouble key, double minimum, double lowerQuartile, double median, double upperQuartile, double maximumvoid设置单个箱线图数据
setDataconst QVector<double>& keys, const QVector<double>& minimums, const QVector<double>& lowerQuartiles, const QVector<double>& medians, const QVector<double>& upperQuartiles, const QVector<double>& maximumsvoid设置多个箱线图数据
addDatadouble key, double minimum, double lowerQuartile, double median, double upperQuartile, double maximumvoid添加单个箱线图
addDataconst QVector<double>& keys, const QVector<double>& minimums, const QVector<double>& lowerQuartiles, const QVector<double>& medians, const QVector<double>& upperQuartiles, const QVector<double>& maximumsvoid添加多个箱线图
setOutliersdouble key, const QVector<double>& outliersvoid设置指定key的异常值
addOutliersdouble key, const QVector<double>& outliersvoid添加异常值

2. 样式设置方法

方法参数返回值描述
setWidthdouble widthvoid设置箱体宽度
setWhiskerWidthdouble widthvoid设置须线宽度比例
setPenconst QPen &penvoid设置箱线画笔
setBrushconst QBrush &brushvoid设置箱体填充画刷
setWhiskerPenconst QPen &penvoid设置须线画笔
setMedianPenconst QPen &penvoid设置中位线画笔
setOutlierStyleconst QCPScatterStyle &stylevoid设置异常值样式

3. 交互相关方法

方法参数返回值描述
setSelectableQCP::SelectionType selectablevoid设置可选择类型
setSelectionQCPDataSelection selectionvoid设置选中项
selected-QCPDataSelection获取选中项
selectTestconst QPointF &pos, bool onlySelectable, QVariant *detailsdouble测试点是否选中

四、信号列表

信号参数描述
selectionChangedbool selected选中状态改变时触发
selectableChangedQCP::SelectionType selectable可选择状态改变时触发

五、基础使用示例

cpp

// 创建箱线图
QCPStatisticalBox *statBox = new QCPStatisticalBox(customPlot->xAxis, customPlot->yAxis);// 设置单个箱线图数据 (key, 最小值, Q1, 中位数, Q3, 最大值)
statBox->setData(1, 3.0, 4.5, 5.8, 7.2, 9.0);// 添加异常值
statBox->addOutliers(1, {2.1, 9.5, 10.2});// 设置样式
statBox->setName("数据分布");
statBox->setWidth(0.3);
statBox->setBrush(QColor(100, 150, 250, 100));
statBox->setMedianPen(QPen(Qt::red, 2));
statBox->setWhiskerWidth(0.2);// 设置坐标轴范围
customPlot->xAxis->setRange(0, 2);
customPlot->yAxis->setRange(0, 12);// 刷新显示
customPlot->replot();

六、高级功能示例

1. 多组箱线图比较

cpp

// 创建第一组箱线图
QCPStatisticalBox *statBox1 = new QCPStatisticalBox(customPlot->xAxis, customPlot->yAxis);
statBox1->setData(1, 3.0, 4.5, 5.8, 7.2, 9.0);
statBox1->addOutliers(1, {2.1, 9.5});
statBox1->setName("组A");
statBox1->setWidth(0.3);
statBox1->setBrush(QColor(100, 150, 250, 100));// 创建第二组箱线图
QCPStatisticalBox *statBox2 = new QCPStatisticalBox(customPlot->xAxis, customPlot->yAxis);
statBox2->setData(2, 2.5, 5.0, 6.5, 8.0, 10.0);
statBox2->addOutliers(2, {1.8, 10.5});
statBox2->setName("组B");
statBox2->setWidth(0.3);
statBox2->setBrush(QColor(250, 150, 100, 100));// 设置坐标轴
customPlot->xAxis->setRange(0, 3);
customPlot->yAxis->setRange(0, 12);

2. 自定义选择样式

cpp

statBox->setSelectable(QCP::stWhole); // 允许选择整个箱线图
statBox->setSelectedBrush(QBrush(QColor(255, 100, 100, 150)));
statBox->setSelectedPen(QPen(Qt::red, 2));// 连接选择信号
connect(customPlot, &QCustomPlot::selectionChangedByUser, [=](){if (statBox->selected()) {qDebug() << "箱线图被选中";}
});

3. 从实际数据计算统计量

cpp

// 计算统计量的辅助函数
void calculateStatistics(const QVector<double> &data, double &min, double &q1, double &median, double &q3, double &max, QVector<double> &outliers)
{QVector<double> sorted = data;std::sort(sorted.begin(), sorted.end());int n = sorted.size();min = sorted.first();max = sorted.last();// 计算四分位数q1 = sorted.at(n*1/4);median = sorted.at(n/2);q3 = sorted.at(n*3/4);// 计算异常值(使用1.5IQR规则)double iqr = q3 - q1;double lowerBound = q1 - 1.5*iqr;double upperBound = q3 + 1.5*iqr;for (double val : data) {if (val < lowerBound || val > upperBound) {outliers.append(val);}}
}// 使用示例
QVector<double> dataset = { /* 你的数据 */ };
double min, q1, median, q3, max;
QVector<double> outliers;
calculateStatistics(dataset, min, q1, median, q3, max, outliers);statBox->setData(1, min, q1, median, q3, max);
statBox->setOutliers(1, outliers);

七、箱线图各部分的含义

Q75:上四分位数
Q25:下四分位数
须线(whisker)
箱体(interquartile range)

八、性能优化技巧

  1. 批量设置数据

    cpp

    // 使用vector批量设置数据比多次调用addData更高效
    QVector<double> keys = {1, 2, 3};
    QVector<double> mins = {3.0, 2.5, 3.2};
    // ...其他统计量向量
    statBox->setData(keys, mins, q1s, medians, q3s, maxs);
  2. 简化绘制

    cpp

    statBox->setAntialiased(false); // 关闭抗锯齿提高性能
  3. 使用OpenGL加速

    cpp

    customPlot->setOpenGl(true);

QCPStatisticalBox 提供了完整的箱线图功能,可以有效地展示数据的分布特征和异常值,特别适用于统计分析和数据比较场景。

相关文章:

  • Redis进阶学习
  • [Windows] 星光桌面精灵 V0.5
  • *数字信号基础
  • 如何使用人工智能大模型,免费快速写工作总结?
  • 有限差分法求解线性常微分方程及python实现
  • Qt基础005(文件操作后续)
  • C++类成员函数 重写、覆盖与隐藏
  • 头歌java课程实验(函数式接口及lambda表达式)
  • 七段码 路径压缩 并查集 dfs
  • Datawhale AI春训营 TASK2 学习笔记
  • 用P0口控制LED(STC89C52单片机)
  • QEMU源码全解析 —— 块设备虚拟化(20)
  • 硬件电路(25)-过温保护器件ksd9700温控开关
  • 图例QCPLegend
  • 深入理解基线检查:网络安全的基石
  • 基于 JavaWeb 的 SpringBoot 办公 ERP 管理系统设计与实现(源码+文档+部署讲解)
  • 从浏览器地址栏输入 URL 到网页显示,这中间发生了什么?
  • [matlab]子图排版和线性回归
  • MySQL8启动失败 NET HELPMSG 3534
  • 016-C语言内存函数
  • 北美票房|《罪人》成首部观众评分为A级的恐怖片
  • 竹笋食用不当,小心“鲜”变“险”
  • “我们一直都是面向全世界做生意”,“世界超市”义乌一线走访见闻
  • IPO周报|本周暂无新股申购,上周上市新股中签浮盈均超1.6万
  • 上海交大发布“AI十条”,鄂维南院士已任该校人工智能学院讲席教授
  • 山东临沂市市长张宝亮履新市委书记