箱線圖(盒須圖)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 提供了完整的箱線圖功能,可以有效地展示數據的分布特征和異常值,特別適用于統計分析和數據比較場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79782.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79782.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79782.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人形機器人馬拉松:北京何以孕育“領跑者”?

“機器人每跑一小步&#xff0c;都是人類科技的一大步”&#xff0c;這句對阿姆斯特朗登月名言的仿寫&#xff0c;恰如其分地詮釋了全球首場人形機器人半程馬拉松賽事的里程碑意義。 2025年4月19日&#xff0c;北京亦莊半程馬拉松暨人形機器人半程馬拉松圓滿結束。在總長21.09…

基于Python的推薦算法的電影推薦系統的設計

標題:基于Python的推薦算法的電影推薦系統的設計與實現 內容:1.摘要 本文圍繞基于Python的推薦算法的電影推薦系統展開研究。背景在于隨著電影數量的急劇增加&#xff0c;用戶在海量電影中找到符合自身喜好的影片變得困難。目的是設計并實現一個高效準確的電影推薦系統&#x…

【深度學習】詳解矩陣乘法、點積,內積,外積、哈達瑪積極其應用|tensor系列02

博主簡介&#xff1a;努力學習的22級計算機科學與技術本科生一枚&#x1f338;博主主頁&#xff1a; Yaoyao2024往期回顧&#xff1a;【深度學習】你真的理解張量了嗎&#xff1f;|標量、向量、矩陣、張量的秩|01每日一言&#x1f33c;: “腦袋想不明白的&#xff0c;就用腳想”…

面試常用基礎算法

目錄 快速排序歸并排序堆排序 n n n皇后問題最大和子數組爬樓梯中心擴展法求最長回文子序列分割回文串動態規劃求最長回文子序列最長回文子串單調棧雙指針算法修改 分割回文串滑動窗口棧 快速排序 #include <iostream> #include <algorithm>using namespace std;…

相對路徑和絕對路徑解析

在 Linux/Unix 和文件系統中&#xff0c;絕對路徑和相對路徑是描述文件或目錄位置的兩種方式&#xff0c;它們的核心區別在于路徑的起點和使用場景。以下是詳細對比&#xff1a; 目錄 1. 定義與起點 2. 符號與語法 3. 使用場景 4. 實際示例 示例 1&#xff1a;定位文件 示…

【算法數據結構】leetcode37 解數獨

37. 解數獨 - 力扣&#xff08;LeetCode&#xff09; 題目描述&#xff1a; 題目要求每一行 &#xff0c;每一列&#xff0c;每個3*3 的子框只能出現一次。每個格子的數字范圍1-9. 需要遍歷每個空格填入可能的數字&#xff0c;并驗證符合規則。如果符合就填入&#xff0c;不符…

Vector的學習

vector簡介 vector的相關文檔對于想深入了解的同學可以參考這個文檔進行學習。 vector是表示可變大小數組的序列容器。 就像數組一樣&#xff0c;vector也采用的連續存儲空間來存儲元素。也就是意味著可以采用下標對vector的元素進行訪問&#xff0c;和數組一樣高效。但是又不…

Vue常用指令入門

1. v-for 作用&#xff1a;用于遍歷對象或數組 注意&#xff1a;需要提供key屬性&#xff0c;可以提高性能和避免渲染錯誤&#xff0c;值通常為index或item.id <li v-for"(item, index) in items" :key"index">{{ item }} </li>2. v-if,v-el…

在機器視覺檢測中為何選擇線陣工業相機?

線陣工業相機&#xff0c;顧名思義是成像傳感器呈“線”狀的。雖然也是二維圖像&#xff0c;但極寬&#xff0c;幾千個像素的寬度&#xff0c;而高度卻只有幾個像素的而已。一般在兩種情況下使用這種相機&#xff1a; 1. 被測視野為細長的帶狀&#xff0c;多用于滾筒上檢測的問…

線性DP:最長上升子序列(子序列可不連續,子數組必須連續)

目錄 Q1&#xff1a;簡單遍歷 Q2&#xff1a;變式&#xff08;加大數據量&#xff09; Q1&#xff1a;簡單遍歷 Dp問題 狀態表示 f(i,j) 集合所有以第i個數結尾的上升子序列集合-f(i,j)的值存的是什么序列長度最大值max- 狀態計算 &#xff08;其實質是集合的劃分&#xff09;…

【Web前端技術】第二節—HTML標簽(上)

hello&#xff01;好久不見—— 做出一個屬于自己的網站&#xff01; 云邊有個稻草人-個人主頁 Web前端技術—本篇文章所屬專欄 目錄 一、HTML 語法規范 1.1 基本語法概述 1.2 標簽關系 二、HTML 基本結構標簽 2.1 第一個 HTML 網頁 2.2 基本結構標簽總結 三、網頁開發…

論文降重GPT指令-實側有效從98%降低到8%

步驟1&#xff1a;文本接收 指令&#xff1a; 請用戶提供需要優化的文本內容。 對文本進行初步分析&#xff0c;識別文本的基本結構和風格。 操作&#xff1a; 接收并分析用戶提交的文本。 步驟2&#xff1a;文本優化 2.1 連接詞處理 指令&#xff1a; 刪除或替換連接詞&#x…

Jsp技術入門指南【九】詳細講解JSTL

Jsp技術入門指南【九】詳細講解JSTL 前言一、什么是JSTL&#xff1f;&#xff08;JavaServer Pages Standard Tag Library&#xff09;二、使用JSTL前的準備三、核心標簽庫常用標簽詳解1. <c:out>&#xff1a;輸出內容&#xff08;替代<% %>&#xff09;2. <c:i…

Linux操作系統--進程的創建和終止

目錄 1.進程創建 1.1fork()函數初識 1.2寫時拷貝 1. 提升系統效率 2. 隔離錯誤影響 3. 支持并行計算 2.進程終止&#xff1a; 2.1進程退出場景&#xff1a; 2.2進程常見退出方法&#xff1a; 2.3_exit()系統調用接口 2.4exit函數 2.5return退出 1.進程創建 1.1for…

OSPF綜合實驗——企業邊界路由器、LSA收斂

IP劃分粗略記號&#xff0c;方便后續配置 配置IP和環回--->ISP的IP配置和cheat認證---->配置OSPF和RIP---->企業邊界路由網段匯總---->特殊區域---> 缺省路由&#xff0c;重分發---->nat配置---->實現全網通 路由器配置IP和環回地址 <Huawei>sys…

Java【網絡原理】(4)HTTP協議

目錄 1.前言 2.正文 2.1自定義協議 2.2HTTP協議 2.2.1抓包工具 2.2.2請求響應格式 2.2.2.1URL 2.2.2.2urlencode 2.2.3認識方法 2.2.3.1GET與POST 2.2.3.2PUT與DELETE 2.2.4請求頭關鍵屬性 3.小結 1.前言 哈嘍大家好啊&#xff0c;今天來繼續給大家帶來Java中網絡…

Android學習總結之APK打包流程

一、預處理階段&#xff08;編譯前準備&#xff09; 1. AIDL 文件處理&#xff08;進程間通信基礎&#xff09; 流程&#xff1a; 用于實現 Android 系統中不同進程間的通信&#xff08;IPC&#xff09;。在項目構建時&#xff0c;AIDL 編譯器會將 .aidl 文件編譯為 Java 接口…

BDO分廠積極開展“五個一”安全活動

BDO分廠為規范化學習“五個一”活動主題&#xff0c;按照“上下聯動、分頭準備 、差異管理、資源共享”的原則&#xff0c;全面激活班組安全活動管理新模式&#xff0c;正在積極開展班組安全活動&#xff0c;以單元班組形式對每個班組每周組織一次“五個一”安全活動。 丁二醇單…

【音視頻】FLV格式分析

FLV概述 FLV(Flash Video)是Adobe公司推出的?種流媒體格式&#xff0c;由于其封裝后的?視頻?件體積?、封裝簡單等特點&#xff0c;?常適合于互聯?上使?。?前主流的視頻?站基本都?持FLV。采?FLV格式封裝的?件后綴為.flv。 FLV封裝格式是由?個?件頭(file header)和…

Java表達式1.0

Java開發工具 在當今的Java開發領域&#xff0c;IntelliJ IDEA已然成為了眾多開發者心目中的首選利器&#xff0c;它被廣泛認為是目前Java開發效率最快的IDE工具。這款備受矚目的開發工具是由JetBrains公司精心打造的&#xff0c;而JetBrains公司總部位于風景如畫的捷克共和國首…