Qwt QwtScaleDraw自定义坐标轴

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

1.概述

QwtScaleDraw 是 Qt 绘图库 Qwt 中的一个类,用于绘制坐标轴刻度线和刻度标签。它提供了一些方法和属性来设置刻度线和标签的样式、布局和对齐方式。

以下是类继承关系:

Qwt QwtScaleDraw自定义坐标轴,Qwt,qt,qwt,QwtPlot,QwtScaleDraw

2.常用方法

标签相关方法:

  • setLabelRotation(double angle):设置标签旋转角度。
  • setLabelAlignment(Alignment alignment):设置标签对齐方式。

刻度线相关设置:

  • void setTickLength (QwtScaleDiv::TickType, double length):设置刻度线长度

自定义标签,重写label方法

  • virtual QwtText label (double) const

3.示例

自定义下x轴的坐标轴。

Qwt QwtScaleDraw自定义坐标轴,Qwt,qt,qwt,QwtPlot,QwtScaleDraw

#ifndef BARCHARTSINGLEWIDGET_H
#define BARCHARTSINGLEWIDGET_H

#include <QWidget>

namespace Ui {
class BarChartSingleWidget;
}

class BarChartSingleWidget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::BarChartSingleWidget *ui;

    QStringList m_distros;
};

#endif // BARCHARTSINGLEWIDGET_H



#include "BarChartSingleWidget.h"
#include "ui_BarChartSingleWidget.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"

//自定义坐标轴
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;
};

//自定义ChartItem类,实现specialSymbol和barTitle方法
class ChartItem : public QwtPlotBarChart
{
  public:
    ChartItem()
        : QwtPlotBarChart( "Page Hits" )
    {
        setLegendMode( QwtPlotBarChart::LegendBarTitles );
        setLegendIconSize( QSize( 10, 14 ) );
        setLayoutPolicy( AutoAdjustSamples );
        setLayoutHint( 4.0 ); // minimum width for a single bar

        setSpacing( 10 ); // spacing between bars
    }

    void addDistro( const QString& distro, const QColor& color )
    {
        m_colors += color;
        m_distros += distro;
        itemChanged();
    }

    virtual QwtColumnSymbol* specialSymbol(
        int index, const QPointF& ) const QWT_OVERRIDE
    {
        // we want to have individual colors for each bar
        //新建一个标记
        QwtColumnSymbol* symbol = new QwtColumnSymbol( QwtColumnSymbol::Box );
        symbol->setLineWidth( 2 );  //设置线宽
        symbol->setFrameStyle( QwtColumnSymbol::Raised );//设置边框风格

        QColor c( Qt::white );
        if ( index >= 0 && index < m_colors.size() )
            c = m_colors[ index ];

        //设置颜色
        symbol->setPalette( c );

        return symbol;
    }

    //设置bar的标题
    virtual QwtText barTitle( int sampleIndex ) const QWT_OVERRIDE
    {
        QwtText title;
        if ( sampleIndex >= 0 && sampleIndex < m_distros.size() )
            title = m_distros[ sampleIndex ];

        return title;
    }

  private:
    QList< QColor > m_colors;       //每个bar的颜色
    QList< QString > m_distros;     //每个bar的标题
};

static QwtPlot *g_plot = nullptr;

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

    const struct
    {
        const char* distro;
        const int hits;
        QColor color;

    } pageHits[] =
    {
        { "一年级", 1114, QColor( "DodgerBlue" ) },
        { "二年级", 1373, QColor( "#d70751" ) },
        { "三年级", 1638, QColor( "SteelBlue" ) },
        { "四年级", 1395, QColor( "Indigo" ) },
        { "五年级", 3874, QColor( 183, 255, 183 ) },
        { "六年级", 1532, QColor( 115, 186, 37 ) },
        { "七年级", 1059, QColor( "LightSkyBlue" ) },
        { "八年级", 2391, QColor( "FireBrick" ) }
    };

    //设置plot背景色
    g_plot = new QwtPlot(QwtText("XX学校学生人数统计"),this);
    g_plot->setAutoFillBackground( true );
    g_plot->setPalette( QColor( "Linen" ) );

    //设置画布
    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 );

    // 创建柱状图
    ChartItem* chartItem = new ChartItem();

    //设置条形图数据
    QVector< double > samples;

    for ( uint i = 0; i < sizeof( pageHits ) / sizeof( pageHits[ 0 ] ); i++ )
    {
        m_distros += pageHits[ i ].distro;
        samples += pageHits[ i ].hits;

        chartItem->addDistro( pageHits[ i ].distro, pageHits[ i ].color );
    }

    chartItem->setSamples( samples );
    chartItem->attach( g_plot );

    //设置坐标轴
    //设置自定义的坐标轴
    g_plot->setAxisTitle( QwtAxis::XBottom, "年级" );
    g_plot->setAxisMaxMinor( QwtAxis::XBottom, 3 );
    g_plot->setAxisScaleDraw( QwtAxis::XBottom, new ScaleDraw( Qt::Vertical, m_distros ) );

    g_plot->setAxisTitle( QwtAxis::YLeft, "人数" );
    g_plot->setAxisMaxMinor( QwtAxis::YLeft, 3 );

    //设置自定义的坐标轴
    QwtScaleDraw* scaleDraw = new QwtScaleDraw();
    scaleDraw->setTickLength( QwtScaleDiv::MediumTick, 4 );
    g_plot->setAxisScaleDraw( QwtAxis::YLeft, scaleDraw );

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

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

    g_plot->replot();

    // 显示绘图对象
    ui->verticalLayout->addWidget(g_plot);
}

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

4.相关参考

Qwt QwtLegend和QwtPlotLegendItem图例类详解-CSDN博客

Qwt QwtPlot类详解-CSDN博客

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

到了这里,关于Qwt QwtScaleDraw自定义坐标轴的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python Axes3D自制坐标轴(没办法俺不知道咋移动坐标轴,但是不移动坐标轴画图太难看了)

       因为很不巧用Axes3D自带的坐标轴画出来图有点丑,首先ticklabels离坐标轴有点远。其次想正负值都能显示。就在想能不能把轴往上移一下,同时拉近ticklabels和坐标轴的距离。    博主主要是发现了用ax.axis(‘off’)或者ax1.set_axis_off()可以达到把坐标轴全部关掉的效果,如下

    2024年02月15日
    浏览(40)
  • 《Qt开发》基于QWT的曲线图绘制

    Qwt绘制曲线图 该示例包含以下功能: 1.使用qwt绘制曲线图 2.通过鼠标实现绘图的缩放,只缩放x轴或只缩放y轴或同时缩放 3.设置绘图区域和绘图区域外的背景颜色 4.通过点击图例实现曲线的显示和隐藏 QwtPlot绘图部件 头文件 #include qwt_plot.h 枚举类型 enum Axis { yLeft , yRight , xBott

    2023年04月08日
    浏览(57)
  • matlab设置坐标轴的坐标显示范围和刻度

    所用代码: 逐个演示代码结果:   参考资料: matlab设置x轴和y轴的坐标显示范围和刻度_matalb的极坐标图如何将坐标标出来_phymat.nico的博客-CSDN博客

    2024年02月09日
    浏览(71)
  • MATLAB: 调整坐标轴范围

    MATLAB: 调整坐标轴范围 在MATLAB中,可以使用一些方法来设置坐标轴的范围。通过调整坐标轴范围,可以改变绘图的可视化效果,并突出显示感兴趣的数据。本文将介绍一些常用的方法和示例代码。 使用axis函数设置坐标轴范围 axis函数是MATLAB中常用的设置坐标轴的函数之一。它

    2024年02月06日
    浏览(44)
  • 第六章、坐标轴的定制

    6.1、坐标轴概述 在绘制图表过程中,matplotlib会根据所绘图表的类型决定是否使用坐标系,或者显示哪种类型的坐标系。 坐标轴的结构相同,主要包括轴脊、刻度,其中刻度又可以细分为刻度线和刻度标签,刻度线又可以细分为主刻线和次刻线。坐标轴的各部分均是matplotli

    2024年02月06日
    浏览(38)
  • 采用VMD按照某一坐标轴旋转坐标结构

    关注 M r . m a t e r i a l   , color{Violet} rm Mr.material , Mr.material   , 更 color{red}{更} 更 多 color{blue}{多} 多 精 color{orange}{精} 精 彩 color{green}{彩} 彩 ! 主要专栏内容包括:   †《LAMMPS小技巧》: ‾ textbf{ underline{dag《LAMMPS小技巧》:}}   † 《 LAMMPS 小技巧》: ​ 主要介绍采

    2024年02月13日
    浏览(36)
  • 3Ds Max坐标轴切换,使用物体的世界坐标和本地坐标之间切换

    官方文档 官方文档 使用“参考坐标系”列表,可以指定变换(移动、旋转和缩放)所用的坐标系。选项包括“视图”、“屏幕”、“世界”、“父对象”、“局部”、“万向”,“栅格”、“工作”和“拾取”。 主工具栏 “参考坐标系”下拉菜单 在“屏幕”坐标系中,所

    2024年02月12日
    浏览(47)
  • python matplotlib笔记:坐标轴设置

    ax.xlim():设置x坐标轴范围 ax.ylim():设置y坐标轴范围 ax.xlabel():设置x坐标轴名称 ax.ylabel():设置y坐标轴名称 ax.xticks():设置x轴刻度 ax.yticks():设置y轴刻度 gca():获取当前坐标轴信息 ax.spines:设置边框 ax.set_color:设置边框颜色:默认白色 ax.spines:设置边框 ax…xaxis.set_ticks_position:设置x坐标

    2024年02月09日
    浏览(38)
  • echarts坐标轴、轴线、刻度、刻度标签

    x 轴和 y 轴都由 轴线、刻度、刻度标签、轴标题 四个部分组成。部分图表中还会有网格线来帮助查看和计算数据 普通的二维数据坐标系都有x轴和y轴,通常情况下,x轴显示在图表底部,y轴显示在左侧,一般配置如下: 当 x 轴(水平坐标轴)跨度很大,可以采用 区域缩放方

    2024年04月14日
    浏览(61)
  • Matlab中如何调整坐标轴刻度

    Matlab中如何调整坐标轴刻度 在Matlab中,我们经常需要对绘图中的坐标轴刻度进行调整,以便更好地展示数据。本文将介绍如何使用Matlab来调整坐标轴刻度,并提供相应的源代码示例供参考。 Matlab提供了多种方法来调整坐标轴刻度。下面我们将介绍其中的两种常用方法:手动

    2024年02月05日
    浏览(62)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包