Qwt QwtPlotMultiBarChart绘制多列柱状图

这篇具有很好参考价值的文章主要介绍了Qwt QwtPlotMultiBarChart绘制多列柱状图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.概述

QwtPlotMultiBarChart 是 Qwt 绘图库中的一个类,用于绘制多列柱状图。它可以显示多个柱状条并将它们按照不同的类别分组显示。每个类别下的柱状条可以有不同的颜色和宽度。

以下是类继承关系图:

Qwt QwtPlotMultiBarChart绘制多列柱状图,Qwt,qt,qwt,QwtPlot,MultiBarChart,QwtPlotBarChart

2.常用方法

设置数据:

  • void setSamples (const QVector< QwtSetSample > &)
  • void setSamples (const QVector< QVector< double > > &)
  • void setSamples (QwtSeriesData< QwtSetSample > *)

设置风格:

  • void setStyle (ChartStyle style)

设置间距:

  • void setSpacing (int) 设置间距
  • void setMargin (int)  设置外边距

设置bar title

  • void setBarTitles (const QList< QwtText > &)

设置图例:

  • setLegendMode( QwtPlotBarChart::LegendBarTitles );设置图例显示模式
  • setLegendIconSize( QSize( 10, 14 ) ); 设置图例图标大小

设置符号:

  • void setSymbol (int valueIndex, QwtColumnSymbol *)

3.示例

统计各个年代,各个学校的人数。

Qwt QwtPlotMultiBarChart绘制多列柱状图,Qwt,qt,qwt,QwtPlot,MultiBarChart,QwtPlotBarChart

#ifndef MULTIBARCHARTWIDGET_H
#define MULTIBARCHARTWIDGET_H

#include <QWidget>

namespace Ui {
class MultiBarChartWidget;
}

class MultiBarChartWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MultiBarChartWidget(QWidget *parent = 0);
    ~MultiBarChartWidget();

private:
    Ui::MultiBarChartWidget *ui;
};

#endif // MULTIBARCHARTWIDGET_H


#include "MultiBarChartWidget.h"
#include "ui_MultiBarChartWidget.h"
#include "qwt_plot.h"
#include "qwt_plot_curve.h"
#include "qwt_text.h"
#include "qwt_legend.h"
#include "qwt_symbol.h"
#include "qwt_plot_marker.h"
#include "qwt_plot_grid.h"
#include "qwt_scale_div.h"
#include "qwt_plot_canvas.h"
#include "qwt_plot_legenditem.h"
#include "qwt_math.h"
#include "qwt_plot_layout.h"
#include "qwt_plot_barchart.h"
#include "qwt_scale_draw.h"
#include "qwt_column_symbol.h"
#include "qwt_plot_renderer.h"
#include "qwt_plot_multi_barchart.h"


//自定义坐标轴
class ScaleDraw : public QwtScaleDraw
{
  public:
    ScaleDraw( Qt::Orientation orientation, const QStringList& labels )
        : m_labels( labels )
    {
        //设置tick长度
        setTickLength( QwtScaleDiv::MinorTick, 0 );
        setTickLength( QwtScaleDiv::MediumTick, 0 );
        setTickLength( QwtScaleDiv::MajorTick, 2 );

        enableComponent( QwtScaleDraw::Backbone, false );

        //设置方向
        if ( orientation == Qt::Vertical )
        {
            setLabelRotation( -60.0 );
        }
        else
        {
            setLabelRotation( -20.0 );
        }

        //设置label对齐方式
        setLabelAlignment( Qt::AlignLeft | Qt::AlignVCenter );
    }

    //重写label方法
    virtual QwtText label( double value ) const QWT_OVERRIDE
    {
        QwtText lbl;

        const int index = qRound( value );
        if ( index >= 0 && index < m_labels.size() )
        {
            lbl = m_labels[ index ];
        }

        return lbl;
    }

  private:
    const QStringList m_labels;
};

static QwtPlot *g_plot = nullptr;
static QwtPlotMultiBarChart *g_multiBarChart = nullptr;

MultiBarChartWidget::MultiBarChartWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MultiBarChartWidget)
{
    ui->setupUi(this);

    g_plot = new QwtPlot(QwtText("XX学校学生"),this);
    ui->verticalLayout->addWidget(g_plot);

    //设置画布
    QwtPlotCanvas* canvas = new QwtPlotCanvas();
    canvas->setLineWidth( 2 );
    canvas->setFrameStyle( QFrame::Box | QFrame::Sunken );
    canvas->setBorderRadius( 10 );

    //设置画布的背景色
    QPalette canvasPalette( QColor( "Plum" ) );
    canvasPalette.setColor( QPalette::WindowText, QColor( "Indigo" ) );
    canvas->setPalette( canvasPalette );

    g_plot->setCanvas( canvas );

    //设置坐标轴标题
    g_plot->setAxisTitle( QwtAxis::YLeft, "人数" );
    g_plot->setAxisTitle( QwtAxis::XBottom, "学校" );

    g_multiBarChart = new QwtPlotMultiBarChart( "Bar Chart " );
    g_multiBarChart->setLayoutPolicy( QwtPlotMultiBarChart::AutoAdjustSamples );
    g_multiBarChart->setSpacing( 10 );
    g_multiBarChart->setMargin( 3 );

    //bar的颜色
    static const char* colors[] = { "DarkOrchid", "SteelBlue", "Gold" };

    const int numSamples = 5;
    const int numBars = sizeof( colors ) / sizeof( colors[0] );

    QList< QwtText > titles;
    for ( int i = 0; i < numBars; i++ )
    {
        QString title("202%1");
        titles += title.arg( i );
    }

    //设置titles
    g_multiBarChart->setBarTitles( titles );
    //设置图标大小
    g_multiBarChart->setLegendIconSize( QSize( 10, 14 ) );

    for ( int i = 0; i < numBars; i++ )
    {
        QwtColumnSymbol* symbol = new QwtColumnSymbol( QwtColumnSymbol::Box );
        symbol->setLineWidth( 2 );
        symbol->setFrameStyle( QwtColumnSymbol::Raised );
        symbol->setPalette( QPalette( colors[i] ) );

        g_multiBarChart->setSymbol( i, symbol );
    }

    //设置数据
    QVector< QVector< double > > series;
    for ( int i = 0; i < numSamples; i++ )
    {
        QVector< double > values;
        for ( int j = 0; j < numBars; j++ )
            values += ( 2 + qwtRand() % 2000 );

        series += values;
    }

    //设置数据
    g_multiBarChart->setSamples( series );

    g_multiBarChart->attach( g_plot );

    //插入图例
    g_plot->insertLegend( new QwtLegend() );

    //设置x范围
    g_plot->setAxisScale( QwtAxis::XBottom, 0, g_multiBarChart->dataSize() - 1, 1.0 );

    //设置y轴自动缩放
    g_plot->setAxisAutoScale( QwtAxis::YLeft );

    QStringList distros;
    distros<<"成都一中"<<"成都二中"<<"成都三中"<<"成都四中"<<"成都五中";
    g_plot->setAxisScaleDraw( QwtAxis::XBottom, new ScaleDraw( Qt::Vertical, distros ) );
    QwtScaleDraw* scaleDraw1 = g_plot->axisScaleDraw( QwtAxis::XBottom );
    scaleDraw1->enableComponent( QwtScaleDraw::Backbone, false );//设置 不显示水平线
    scaleDraw1->enableComponent( QwtScaleDraw::Ticks, false );//设置不显示刻度线

    QwtScaleDraw* scaleDraw2 = g_plot->axisScaleDraw( QwtAxis::YLeft );
    scaleDraw2->enableComponent( QwtScaleDraw::Backbone, true );
    scaleDraw2->enableComponent( QwtScaleDraw::Ticks, true );

    g_plot->plotLayout()->setAlignCanvasToScale( QwtAxis::XBottom, true );
    g_plot->plotLayout()->setAlignCanvasToScale( QwtAxis::YLeft, false );

    g_plot->plotLayout()->setCanvasMargin( 0 );
    g_plot->updateCanvasMargins();

    g_plot->replot();

    g_plot->setAutoReplot( true );
}

MultiBarChartWidget::~MultiBarChartWidget()
{
    delete ui;
}

4.相关推荐

Qwt QwtPlotBarChart自定义条形统计图-CSDN博客文章来源地址https://www.toymoban.com/news/detail-739675.html

到了这里,关于Qwt QwtPlotMultiBarChart绘制多列柱状图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt使用qwtplot3d绘制3D曲面

    qwtplot3d 是一个基于 Qt/OpenGL 的 C++ 程序库,为开发者提供了一些3D组件。其核心通过调用 openGL 库来完成,可以实现三维曲面绘制,三维状态下折线,散点等图形的绘制。最新的版本为 qwtplot3d-0.2.7,更新于 2007-06-25,已经有十几年没更新了。   用 Qt 打开工程之后,需要先在

    2024年02月07日
    浏览(54)
  • QT绘制饼图+柱状图+折线图

    项目需要使用到不同的统计图案的方法来显示统计数据 包括:饼图、柱状图、折线图。 饼图的实现 具体实现代码如下: 首先需要一个 QChartView 来存放饼图,实现如下: 拖拽一个 QGraphicsView ,并且将其提升为 QChartView , 柱状图的实现 同上: 首先需要一个 QChartView 来存放饼

    2024年02月16日
    浏览(47)
  • QT - qwtplot3d-3D图标

    https://download.csdn.net/download/u013083044/88745622?spm=1001.2014.3001.5503

    2024年01月17日
    浏览(36)
  • Echarts—X轴鼠标滑动或者缩放/多列柱状图中某一列数据为0时不占位

    用柱状图展示12个月的项目对应的供应商数据; 每个月有多个项目不确定,1-50之间,也就是说,12个月,每个月的X轴上有不确定的柱状;例如:1月有20根柱子,2月有5根柱子,3月有15根… 每月的每根柱子代表是一个项目,鼠标移入每月的每一个项目的柱子上要悬浮展示该月该

    2024年02月09日
    浏览(90)
  • 【Python】pyecharts 模块 ⑥ ( 绘制柱状图 | pyecharts 绘制柱状图步骤 | 柱状图 x 轴 / y 轴 翻转 | 柱状图数据标签位置设置 )

    pyecharts 画廊网站 : https://gallery.pyecharts.org/#/ 在该网站可查看官方示例 首先 , 导入 柱状图 Bar 类 , 该类定义在 pyecharts.charts 模块中 ; 然后 , 创建 柱状图 Bar 类型 实例对象 , 该对象代表了一个柱状图 ; 再后 , 设置该 柱状图的 x 轴 和 y 轴数据 , 调用 Bar#add_xaxis() 函数 , 设置 x 轴数

    2024年02月13日
    浏览(43)
  • [QCustomPlot] QCPBar绘制柱状图并同时显示柱状图的值

    博主在使用 qcustomplot 绘制柱状图时,发现网络上的教程。大都忽略了一个重要的点就是。柱状图没有明显显示出当前的值。经过博主寻找后发现在 qcustomplot 论坛中已经有了对应的解决方案。所以记录一下。qcustomplot论坛 如果要做悬浮显示当前柱状图的值,对于 qcustomplot 来说

    2024年02月06日
    浏览(41)
  • Matplotlib绘制柱状图

    柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其所表示的数值成正比关系。柱状图显示了不同类别之间的比较关系,图表的水平轴 X 指定被比较的类别,垂直轴 Y 则表示具体的类别值。 绘制柱状图的命令为: bar() 1.简单柱

    2024年02月09日
    浏览(51)
  • python如何绘制柱状图

    安装两种插件 柱状图绘制步骤 导入 matplotlib.pyplot 模块 准备数据,可以使用 numpy/pandas 整理数据 调用 pyplot.bar() 绘制柱状图 上代码 效果图 函数解析 plt.bar() 用于画柱状图,还可以使用 plt.plot() 绘制折线图 plt.xlabel() plt.ylabel() 用于标注x轴、y轴 plt.title() 用于给图片添加标题

    2024年02月11日
    浏览(41)
  • Python绘制柱状图堆叠图

    本文详细介绍如何使用 Matplotlib 绘制柱状堆叠图 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 开始绘制柱状堆叠图之前,我们需要生成实验数据。在本案例中,我们可以使用 NumPy 库生成两个数组 y1 和 y2 来分别表示产品 A 和 B 在五个不同城

    2024年02月07日
    浏览(44)
  • R语言绘图:绘制横向柱状图

    代码主要实现: 对数据进行排序,并且相同分组的数据会有相同的颜色。最后,绘制横向柱状图。 结果展示:

    2024年04月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包