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

坐标轴QCPAxis

一、QCPAxis 概述

QCPAxis 是 QCustomPlot 中负责坐标轴显示的类,控制坐标轴的绘制、刻度、标签和网格线等元素。

二、主要属性

属性类型描述
rangeQCPRange当前显示的轴范围
labelQString轴标签文本
labelFontQFont轴标签字体
tickerQSharedPointer<QCPAxisTicker>刻度生成器
gridQCPGrid*网格线对象
basePenQPen轴线画笔
tickPenQPen刻度线画笔
subTickPenQPen子刻度线画笔
tickLabelsbool是否显示刻度标签
tickLabelFontQFont刻度标签字体
tickLabelRotationdouble刻度标签旋转角度(度)
numberFormatQString数字格式(如"gb")
numberPrecisionint数字精度
visiblebool是否可见

三、常用方法

1. 范围控制方法

方法参数描述
setRangeconst QCPRange &range设置轴范围
setRangedouble lower, double upper设置轴范围
rescalebool onlyVisiblePlottables根据数据自动调整范围
scaleRangedouble factor, double center缩放范围
moveRangedouble diff平移范围

2. 刻度设置方法

方法参数描述
setTickerQSharedPointer<QCPAxisTicker> ticker设置刻度生成器
setTickLabelsbool show显示/隐藏刻度标签
setTickLabelFontconst QFont &font设置刻度标签字体
setTickLabelRotationdouble degrees设置标签旋转角度
setTickLengthint inside, int outside设置刻度线长度
setSubTickLengthint inside, int outside设置子刻度线长度

3. 样式设置方法

方法参数描述
setLabelconst QString &text设置轴标签
setLabelFontconst QFont &font设置轴标签字体
setLabelColorconst QColor &color设置轴标签颜色
setBasePenconst QPen &pen设置轴线画笔
setTickPenconst QPen &pen设置刻度线画笔
setSubTickPenconst QPen &pen设置子刻度线画笔

四、信号列表

信号参数描述
rangeChangedconst QCPRange &newRange范围改变时触发
scaleTypeChangedQCPAxis::ScaleType scaleType比例类型改变时触发
selectionChangedconst QCPAxis::SelectableParts &parts选择状态改变时触发

五、枚举类型

1. AxisType 轴类型

描述
atLeft左侧Y轴
atRight右侧Y轴
atTop顶部X轴
atBottom底部X轴

2. ScaleType 比例类型

描述
stLinear线性比例
stLogarithmic对数比例

六、基础使用示例

cpp

// 获取底部X轴
QCPAxis *xAxis = customPlot->xAxis;// 设置轴范围
xAxis->setRange(0, 10);// 设置轴标签
xAxis->setLabel("时间 (s)");
xAxis->setLabelFont(QFont("Arial", 12));// 设置刻度
xAxis->setTickLength(5, 3); // 主刻度5px向外,3px向内
xAxis->setSubTickLength(2, 1); // 子刻度2px向外,1px向内
xAxis->setTickLabelFont(QFont("Arial", 9));
xAxis->setTickLabelRotation(45); // 刻度标签旋转45度// 设置网格线
xAxis->grid()->setPen(QPen(QColor(200, 200, 200), 1, Qt::DotLine));// 使用日期时间刻度
QSharedPointer<QCPAxisTickerDateTime> dateTicker(new QCPAxisTickerDateTime);
dateTicker->setDateTimeFormat("hh:mm:ss\nyyyy-MM-dd");
xAxis->setTicker(dateTicker);

七、高级功能示例

1. 对数坐标轴

cpp

// 设置对数坐标
customPlot->yAxis->setScaleType(QCPAxis::stLogarithmic);// 自定义对数刻度
QSharedPointer<QCPAxisTickerLog> logTicker(new QCPAxisTickerLog);
logTicker->setLogBase(10);
logTicker->setSubTickCount(8);
customPlot->yAxis->setTicker(logTicker);// 设置标签格式
customPlot->yAxis->setNumberFormat("eb"); // 科学计数法
customPlot->yAxis->setNumberPrecision(0); // 无小数位

2. 多轴系统

cpp

// 创建右侧Y轴
QCPAxis *rightAxis = customPlot->axisRect()->addAxis(QCPAxis::atRight);
rightAxis->setLabel("温度 (°C)");// 将图形关联到右侧轴
QCPGraph *tempGraph = customPlot->addGraph(customPlot->xAxis, rightAxis);// 设置不同轴的范围
customPlot->yAxis->setRange(0, 100); // 左侧轴
rightAxis->setRange(0, 50); // 右侧轴

3. 自定义刻度标签

cpp

// 创建自定义刻度生成器
class CustomTicker : public QCPAxisTicker {
public:virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) override{// 特殊标记某些刻度if (qFuzzyCompare(tick, 0.0))return "零";else if (qFuzzyCompare(tick, 5.0))return "五";elsereturn QCPAxisTicker::getTickLabel(tick, locale, formatChar, precision);}
};// 使用自定义刻度
QSharedPointer<CustomTicker> customTicker(new CustomTicker);
customPlot->xAxis->setTicker(customTicker);

八、性能优化技巧

  1. 限制刻度数量

    cpp

    QSharedPointer<QCPAxisTickerFixed> fixedTicker(new QCPAxisTickerFixed);
    fixedTicker->setTickCount(5); // 只显示5个主刻度
    xAxis->setTicker(fixedTicker);
  2. 简化标签绘制

    cpp

    xAxis->setTickLabels(false); // 完全隐藏标签
    // 或
    xAxis->setTickLabelRotation(0); // 避免旋转标签(更快)
  3. 优化网格线

    cpp

    xAxis->grid()->setZeroLinePen(Qt::NoPen); // 隐藏零线
    xAxis->grid()->setSubGridVisible(false); // 隐藏子网格

QCPAxis 提供了高度可定制的坐标轴系统,可以满足各种复杂图表的需求。通过合理配置,可以创建出专业级的科学图表和商业可视化效果。

相关文章:

  • Spring之我见 - Spring Boot Starter 自动装配原理
  • deepseek + kimi制作PPT
  • FOC控制中的正弦PWM和空间矢量PWM对比与理解
  • vscode使用技巧
  • STM32 CubeMx下载及安装(一)
  • Java基础-第一章、基本数据类型
  • python pdf转图片再OCR
  • 系统架构设计师:系统架构定义与分类相关知识点、记忆要点提示、记忆卡片、练习题、答案与解析
  • B树的异常恢复
  • 深入浅出讲解UDP检验中如何计算检验和
  • paddleocr出现: [WinError 127] 找不到指定的程序解决办法
  • ZYNQ笔记(九):定时器中断
  • 简易Linux GPIO工具
  • linux多线(进)程编程——(9)信号量(二)
  • Kotlin实现Android应用保活方案
  • 【Linux】Rhcsa复习5
  • 电压、电阻、电流型输入的区别
  • npm link 使用指南
  • 《前端面试题之 Vue 篇(第三集)》
  • pivot_root:原理、用途及最简单 Demo
  • 义乌女老板对CNN霸气喊话:美国要货就给,不要就分给其他客户
  • 观察|中日航线加速扩容,航空公司如何抓住机会?
  • 境外机构来华发行熊猫债累计超9500亿元
  • 特朗普:乌克兰问题谈判短期内若无进展美将不再斡旋
  • 江苏银行去年净赚超318亿增超10%,不良贷款率持平
  • 安徽省合肥市人大常委会原副主任杜平太接受审查调查