Qt图表绘制(QtCharts)-绘制简单的盒须图[箱形图](12)

article/2025/8/27 0:24:55

Qt图表绘制(QtCharts)-绘制简单的盒须图[箱形图](12)✌

文章目录

  • Qt图表绘制(QtCharts)-绘制简单的盒须图[箱形图](12)✌
    • 1、概述🤏
    • 2、实现步骤🤞
    • 3、主要使用的类🤟
    • 4、主要代码🤘
    • 5、实现效果🤛
    • 6、源代码👍

更多精彩内容
👉个人内容分类汇总 👈
注意:我使用的QtCharts是基于Qt 5.12.12版本

1、概述🤏

Qt Charts 模块提供了一组易于使用的图表组件,能够创建时尚、交互式、以数据为中心的用户界面。

它使用 Qt Graphics View 框架,因此可以轻松地将图表集成到现代用户界面中。

Qt Charts 可以用作 QWidgets、QGraphicsWidget 或 QML 类型。 用户可以通过选择图表主题之一轻松创建令人印象深刻的图表。

这一个Demo干了啥:🤏🤏🤏

  • initChart()函数中演示了如何使用QtCharts绘制简单的的盒须图(箱形图)
  • Qt示例中通过继承QTextStream类实现读取数据功能,感觉过于复杂,为了便于学习将读取数据功能直接封装成一个getData()函数;
  • 在源码中包含使用的详细注释和注意事项 ;
  • 将UI和代码分离,使实现图表绘制的代码更单一简洁,便于学习。

2、实现步骤🤞

  1. 打开.pro文件,输入Qt += charts,引入Qt Charts模块;

    在这里插入图片描述

  2. 打开ui设计器,选择一个Graphics View控件,鼠标右键提升为

    在这里插入图片描述

    在这里插入图片描述

  3. 输入QChartView,点击添加、提升;

    在这里插入图片描述

  4. 在窗口右上角就可以看见控件类型变成QChartView了,然后将控件命名为chartView; 注意:由于QChartView需要引入命名空间,所以这里提升后编译时不通过的。

    在这里插入图片描述

  5. 在代码中添加QtCharts头文件,引入命名空间;一般我们最好在cpp文件中添加头文件和引入命名空间,尽量避免在.h文件中引入(这里为了方便,代码简洁直接在头文件中引入命名空间),而在cpp文件中引入命名空间需要在ui_widget.h文件前,否则编译会失败,因为在ui文件中会用到QChartView类。

    #include <QtCharts>         // 导入QtCharts所有的头文件,也可以单独导入某一个// 引入qchart命名空间(注意:如果是在ui中提升为QChartView,
    // 则QT_CHARTS_USE_NAMESPACE一定要放在#include "ui_widget.h"前面,否则编译会失败)
    QT_CHARTS_USE_NAMESPACE
    

3、主要使用的类🤟

类名作用
QBoxPlotSeries创建一个用于绘制盒须图的数据集对象
QBoxSet单个盒须图数据对象,由下限、下四分位数、中位数、上四分位数和上限五个值组成
QAbstractAxis坐标轴基类

4、主要代码🤘

  • widget.h文件
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QBoxPlotSeries>
QT_CHARTS_USE_NAMESPACE        // 引入命名空间,必须放在ui_widget.h前QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:void initChart();                // 初始化绘制图表QList<QBoxSet *> getData();      // 获取用于绘制的盒须图数据qreal findMedian(QList<qreal>& sortedList, int begin, int end);private:Ui::Widget *ui;
};
#endif // WIDGET_H
  • widget.cpp文件
#include "widget.h"
#include "ui_widget.h"#include <qdebug.h>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("QtCharts绘图-盒须图(箱型图)Demo");initChart();
}Widget::~Widget()
{delete ui;
}/*** @brief 初始化绘制图表*/
void Widget::initChart()
{QBoxPlotSeries* series = new QBoxPlotSeries();             // 创建一个用于绘制盒须图的数据集对象series->setName("XXX公司");series->append(getData());                                 // 读取资源文件中的数据并添加进seriesQChart* chart = ui->chartView->chart();chart->addSeries(series);                                  // 将需要绘制的数据集(series)添加进char中chart->setTitle("盒须图标题");                               // 设置图表标题chart->setAnimationOptions(QChart::SeriesAnimations);      // 设置图表显示的动画(对性能有影响)chart->createDefaultAxes();                                // 根据已有的series生成对应类型的XY轴QAbstractAxis* axisY = chart->axes(Qt::Vertical).first();  // 获取Y轴axisY->setRange(15, 35);                                   // 设置Y轴范围,让图表更容易观看(Qt的示例中这里有bug,设置成了X轴)chart->legend()->setVisible(true);                         // 显示图例chart->legend()->setAlignment(Qt::AlignBottom);            // 设置图例显示位置ui->chartView->setChart(chart);ui->chartView->setRenderHint(QPainter::Antialiasing);      // 设置抗锯齿
}/*** @brief  读取资源文件,返回用于绘制的盒须图数据* @return 返回用于绘制的数据,如果count为0则没有可用数据*/
QList<QBoxSet *> Widget::getData()
{QList<QBoxSet *> dataList;QList<qreal> sortedList;QFile file(":/acme.txt");if(!file.open(QIODevice::ReadOnly | QIODevice::Text))   // 文件打开失败return dataList;while (!file.atEnd()){QString line = file.readLine();if(line.isEmpty() || line.startsWith("#"))         // 如果数据无效则跳过continue;QStringList strList = line.split(" ", QString::SkipEmptyParts);  // 以空格拆分字符串sortedList.clear();for(int i = 1; i < strList.count(); i++){sortedList.append(strList.at(i).toDouble());}std::sort(sortedList.begin(), sortedList.end());                 // 由于qt中提示qSort过时了,推荐使用std::sortint count = sortedList.count();QBoxSet* box = new QBoxSet();    // 创建盒须图的一个数据(由下限、下四分位数、中位数、上四分位数和上限 五个值组成)box->setLabel(strList.first());  // 设置标签box->setValue(QBoxSet::LowerExtreme, sortedList.first());                         // 下极限box->setValue(QBoxSet::UpperExtreme, sortedList.last());                          // 上极限box->setValue(QBoxSet::Median, findMedian(sortedList, 0, count));                 // 中位数box->setValue(QBoxSet::LowerQuartile, findMedian(sortedList, 0, count / 2));      // 下四分位数box->setValue(QBoxSet::UpperQuartile,findMedian(sortedList, (count / 2) + (count % 2), count));          // 上四分位数,(count % 2)当数据个数为奇数时向上取整dataList.append(box);}return dataList;
}/*** @brief              计算数组中的中位数,如果设置起始终止位置可用计算(下上四分位数、上四分位数)* @param sortedList   需要计算中位数的数组* @param begin        起始位置* @param end          中止位置* @return             中位数(下四分位数、上四分位数)*/
qreal Widget::findMedian(QList<qreal> &sortedList, int begin, int end)
{int count = end - begin;if(count % 2){return sortedList.at(count / 2 + begin);}else   // 如果需要计算的数是偶数,则取两个数的平均值{qreal right = sortedList.at(count / 2 + begin);qreal left = sortedList.at(count / 2 - 1 + begin);return (right + left) / 2.0;}
}
  • 资源文件came.txt
# Acme Ltd share deviation in 2012
Jan 27.74 27.28 27.86 28.05 28.64 27.47 28.30 28.22 28.72 26.50 26.62 26.50 26.15 26.47 26.41 25.78 24.82 24.89 24.88 24.60 23.85
Feb 31.79 30.62 30.67 31.37 31.16 31.22 32.02 32.70 31.60 31.24 30.98 30.79 31.10 30.79 31.53 30.92 30.00 30.58 30.37 29.40 28.60
Mar 28.64 28.34 29.13 29.43 30.75 29.77 29.72 30.52 31.12 33.05 32.51 32.69 31.83 32.47 31.41 31.39 31.78 30.08 29.46 31.58 31.39 31.41
Apr 25.96 26.62 26.19 30.37 28.78 27.50 28.90 28.40 28.86 28.90 27.91 27.32 27.99 26.86 26.68 27.57 27.50 28.96 28.50
May 20.85 21.08 21.98 21.61 21.45 21.73 21.71 22.27 21.14 20.65 21.95 22.23 23.17 24.26 24.17 22.97 23.53 24.49 24.51 25.46 25.65
Jun 18.08 17.19 17.36 17.21 17.31 18.19 18.30 17.53 17.35 17.80 17.17 16.95 18.25 20.52 20.61 21.40 20.45 19.43 19.11 19.74
Jul 17.75 18.24 17.57 16.53 15.98 16.06 16.64 17.69 17.91 18.00 18.03 18.14 18.10 17.86 18.12 18.53 18.43 18.30 19.03 18.76 18.79 18.33
Aug 18.69 18.54 18.39 18.49 18.96 18.72 19.25 19.70 20.13 19.74 19.27 18.25 17.72 18.02 18.20 18.24 18.60 18.22 18.60 17.98 17.27 16.70 17.19
Sep 18.35 18.82 18.96 19.96 19.75 20.55 20.68 21.19 21.14 21.48 21.45 20.74 20.97 20.18 19.66 19.54 18.89 18.39 18.26 18.86
Oct 16.95 16.80 16.45 16.89 17.38 17.12 16.85 17.59 17.65 17.46 17.43 17.30 17.87 18.61 18.55 18.59 19.27 19.54 20.02 19.23 18.05 18.52 18.71
Now 19.36 19.29 18.22 18.74 19.05 19.13 18.67 18.19 17.94 18.04 17.49 17.53 17.64 18.00 18.21 18.19 18.30 18.11 18.17 17.76 17.80 17.52
Dec 19.95 20.19 20.15 20.42 20.39 20.65 20.39 19.86 19.48 19.70 19.94 19.82 20.25 20.21 19.63 19.55

5、实现效果🤛

在这里插入图片描述

6、源代码👍

gitee
github

☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝


http://chatgpt.dhexx.cn/article/FMNV7yjd.shtml

相关文章

Qt散点图、折线图、柱状图、盒须图、饼状图、雷达图开发实例

目录 散点图 折线图 柱状图 水平柱状图 水平堆叠图 水平百分比柱状图 盒须图 饼状图 雷达图 Qt散点图、折线图、柱状图、盒须图、饼状图、雷达图开发实例。 在开发过程中我们会使用多各种各样的图&#xff0c;讲数据进行可视化。我们可以使用以上几种图来表达我们的数…

Tableau-盒须图

Tableau-盒须图 前言1.1 数据拖拽1.2 智能推荐-盒须图1.3 结果展示 前言 盒须图的制作方便我们直观观察数据分布情况。 对应业务场景&#xff0c;例如餐饮数据&#xff0c;我们可以通过盒须图查看不同店铺在不同平台上GMV总和数据信息。 本文的数据较少&#xff0c;不能很好的…

盒须图简介

2019独角兽企业重金招聘Python工程师标准>>> 盒须图&#xff08;Boxplot&#xff09;主要用于对数据分布的显示。对于详细数据的显示通常采用下面几种方法。 最简单的方法是把所有的数据显示在一个散点图上。读者可以直接观察数据点的分布。 但如果数据量很大&#…

数据分散情况的统计图-盒须图

数据可视化分析时还常常需要观察数据的分布状态&#xff0c;或者查看某一个个体在整体的表现如何&#xff0c;这都需要用到统计分布图&#xff0c;盒须图就是其中的一种。 盒须图它可以用来反映一组或者多组数据的分布情况&#xff0c;因形状像长着胡须的盒子而得名。 盒须图…

Tableau图表 • 盒须图、抖动图

盒须图&#xff0c;又叫箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图。盒须图能够比较直观的显示数据集的分散程度、异常值等信息。 盒须图 盒须图基础 盒须图包括六个统计量&#xff1a;最小值&#xff0c;下四分位数(Q1)&#xff0c;中位数&#xff0c;…

22.23.24.25.盒须图(boxplot)、棉棒图(Stem Plot; Lollipop plot)、极坐标图、雷达图(Radar Chart)

22.盒须图&#xff08;boxplot&#xff09; 23.棉棒图(Stem Plot; Lollipop plot) 24.极坐标图 25.雷达图&#xff08;Radar Chart&#xff09; 22.盒须图&#xff08;boxplot&#xff09; 盒须图(也称为箱形图&#xff09;是一种图表类型&#xff0c;通常用于说明性数据分析…

PS图片中字体或图像的颜色替换

第一步、打开替换颜色修改框。步骤&#xff1a;图像——调整——替换颜色 第二部、选择要替换的颜色 完后点确定&#xff0c;就可以修改好自己想要的颜色。

如何使用PS改变只有一种颜色图片的颜色

这里所说的图片是这种单色的图片 首先将这张图片拖到PS中打开&#xff0c;选择 图层 > 图层样式 > 颜色叠加 然后我们选择一种颜色 颜色改完了&#xff0c;保存。

ps修改图片的颜色

作为一个啥都要会的前端&#xff0c;有时候UI给了图&#xff0c;都是单色黑的&#xff0c;说需要什么颜色自己调&#xff0c;so&#xff1a; 1,新建一个200*200像素的画布(和图片一样大的画布) 2,将图片拖入画布 3,在右侧图层上双击&#xff0c;出现对话框 4,双击对话框左侧菜单…

PS修改图片的背景颜色(无需抠图)

1.复制图层&#xff0c;可以鼠标右键复制图层或CtrlJ复制图层 2.在菜单栏找到图像-->调整-->替换颜色&#xff0c;此时鼠标箭头变成了一个吸管的样子&#xff0c;去吸一下想要替换的颜色&#xff0c;然后选择要修改的颜色即可 具体如下操作&#xff1a;

不是美工,如何使用ps快速更换图标icon的颜色?

最近做个项目&#xff0c;美工撂挑子不干了&#xff0c;需要处理一个icon的颜色&#xff0c;怎么办呢&#xff1f;关键时刻只有靠自己了&#xff0c;自己上手。 使用ps就是简单&#xff0c;把制作方法分享给大家&#xff0c;欢迎留言讨论&#xff0c;自己也做个备忘。 目 录…

ps修改图片中的文字、数字

刚才学习修改ps图片中的文字&#xff0c;找到知乎这位博主写的&#xff0c;很详细&#xff0c;下面转载一下&#xff01;&#xff01; https://zhuanlan.zhihu.com/p/134102174 以下内容&#xff0c;是根据视频教程边学习&#xff0c;边做的笔记ヾ(o◕∀◕)&#xff89;ヾ 讲…

PS如何修改图片日期或者其他文本内容

Spraing※boy作为一个修图软件&#xff0c;PS的功能强大到毫无人性&#xff0c;我也在逐渐探索这个神器&#xff0c;奢望着有一天能够征服它&#xff0c;给自己也P上黄金万两。这篇博客我们主要来探索一下PS如何修改图片上的日期或者其他的文本内容。 准备阶段&#xff1a;PS软…

ps改变图片色调

作u3d&#xff0c;还要稍微会一点ps的东西。 要改变图片文字或者其他整块颜色块的的颜色&#xff0c;首先 然后第二步&#xff1a; 减去多余的选区 最后&#xff0c;用油漆桶涂上其他颜色

ps改变图片的颜色

用PS打开图片选中你要改变颜色的区域&#xff0c;然后点击&#xff1a;图像-调整-颜色替换 然后选中中间的吸管&#xff0c;随意吸一个你所选区域&#xff0c;再调整色相&#xff0c;饱和度&#xff0c;明度 转载于:https://www.cnblogs.com/ccpblo/p/7009395.html

ps修改图片中的图片尺寸

今天有个小需求&#xff0c;需要修改图片中一个小icon的大小&#xff0c;统一修改为32*32 简单自学了一下ps&#xff0c;把方法分享给大家。 需要修改的图片文件为&#xff1a; 把icon修改为32*32尺寸大小。 ps具体操作如下&#xff1a; 1.使用ps打开需要修改的png文件&…

如何使用PS修改图片背景

&#xff08;1&#xff09;使用PS打开图片&#xff0c;使用魔法棒选中整个图片&#xff0c;然后点击空白处&#xff0c;右键选择反选&#xff0c;点击“选择反向” &#xff08;2&#xff09;点击反选后&#xff0c;再次点击“通过拷贝的图层”。 &#xff08;3&#xff09;删除…

PS CC 2015 修改图片颜色和大小

为什么修改图片颜色&#xff1f; 【预期&#xff1a;】设计师给的设计稿两种颜色的图片&#xff0c;图片尺寸要求是48x48像素&#xff0c;一张绿色&#xff0c;一张白色。 【实际】绿色图片符合要求&#xff0c;白色图片是40x40像素&#xff0c;偏小。测试妹子不干了&#xff0…

【Photoshop 教程系列第 1 篇】如何用 PS 给图片添加文字,修改文字的字体,大小和颜色

这是【Photoshop 教程系列第 1 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 以 Photoshop 2021 为例。 首先导入一张图片&#xff0c;选择 【文字工具】&#xff0c;根据下图所示选择自己想要的字体、文字大小和颜色&#xff0c;然后将光标定在图片中某一位…

矩阵乘法的性质和矩阵的幂、转置,逆

矩阵乘法的性质和矩阵的幂 矩阵乘法的性质矩阵的幂矩阵的转置逆矩阵齐次线性方差组的解 矩阵乘法的性质 矩阵的幂 矩阵的转置 逆矩阵 齐次线性方差组的解 AX0 增广矩阵 行最简形势 如果非零行的数量小于未知数的数量&#xff0c;则有无数个解