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

qt使用对数坐标的例子,qchart用QLogValueAxis坐标不出图解决

硬件:ThinkPad T15

系统:win10 专业版

qt版本:Qt 5.14.1   , QtCreator 4.11.1

软件界面放了一个QPushButton,一个QVBoxLayout,如下:

主要代码如下,我添加了两条曲线,分别是series和series2,每条曲线1000个点,第一条曲线y值随x线性增加,第二条曲线y值获取的是0到1000以内的随机值,然后纵坐标用的对数坐标,范围是0.1到1000:

chart = new QChart();chart->setTitle("强度变化曲线");chart->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);chartView = new QChartView(this);chartView->setChart(chart);chartView->setRubberBand(QChartView::RectangleRubberBand);ui->verticalLayout->addWidget(chartView);
//使用对数坐标QLogValueAxis *logAxisY =new QLogValueAxis();logAxisY->setRange(0.1,1000);logAxisY->setLabelFormat("%.2f");// 设置纵坐标的标签格式logAxisY->setTitleText("y坐标");logAxisY->setMinorTickCount(5);//设置刻度间隔间的子间隔QValueAxis *axisX = new QValueAxis();axisX->setTitleText("x坐标");axisX->setRange(0, 100);chart->addAxis(logAxisY,Qt::AlignLeading);chart->addAxis(axisX,Qt::AlignBottom);QLineSeries *series = new QLineSeries(chart);//初始化一条折线QLineSeries *series2 = new QLineSeries(chart);//初始化一条折线for(int j = 1;j<=1000;j++){series->append(j*1.0f/10,j);//第一条曲线的y值线性增长double y = QRandomGenerator::global()->bounded(1000);if(y<=0)qDebug()<<y;y = y<=0?0.1:y;//因为对数曲线不能处理负数和0,所以要剔除异常值,否则曲线无法显示series2->append(j*1.0f/10,y);//第二条曲线的y值随机1000以内的值}chart->addSeries(series);//曲线添加到chart类中series->attachAxis(logAxisY);//曲线绑定y坐标(对数坐标)series->attachAxis(axisX);//曲线绑定x坐标(普通坐标)chart->addSeries(series2);//曲线添加到chart类中series2->attachAxis(logAxisY);//曲线绑定y坐标(对数坐标)series2->attachAxis(axisX);//曲线绑定x坐标(普通坐标)

运行效果如下,蓝色的是y随x线性增加的曲线,绿色的是y值取随机值的曲线:

正常的代码逻辑是:1.初始化QChart,2.初始化QChartView,并通过QChartView::setChart(QChart *chart)来设置QChart,3.初始化QLogValueAxis作为纵坐标并设置坐标轴范围,初始化QValueAxis作为横坐标并设置坐标轴范围,4.通过QChart::addAxis(QAbstractAxis *axis, Qt::Alignment alignment)将2个坐标轴添加到QChart中,5.初始化曲线QLineSeries,并将数据塞进曲线中,6.通过QChart::addSeries(QAbstractSeries *series)将曲线放进QChart中,7.通过QAbstractSeries::attachAxis(QAbstractAxis *axis)将曲线和坐标轴绑定。然后就能正常显示了。

有几个问题要注意:

问题一:如果没有将曲线绑定到对数坐标,那么显示出来的曲线是按照线性y坐标显示的,如下图:

问题二:曲线中的y值出现了<=0的值,则该条曲线就不能显示,如下图,第二条曲线中出现了0值,所以直接不显示了,只显示不含0值的第一条曲线:

问题三:每次重新显示曲线前,要清空QChart中之前已有的曲线和坐标轴,否则会出现多个坐标轴和曲线的情况,如下:

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第J3-1周:DenseNet算法 实现乳腺癌识别(pytorch)
  • 【Echarts】vue3打开echarts的正确方式
  • 惬意享受阅读,优雅的微信公众号订阅方式,极空间部署『WeWe RSS』
  • C++函数在库中的地址
  • java面向对象:构造方法
  • PMP--一模--解题--131-140
  • 感知器神经网络
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——12.二叉树(习题)
  • 【Kubernetes】常见面试题汇总(十)
  • 代码随想录训练营第34天|dp前置转移
  • 【C++ Primer Plus习题】16.3
  • PHP:强大的Web开发语言
  • 基于微信小程序的高校实验室管理系统的设计与实现
  • 数据结构之外部排序
  • ros学习笔记.4 Path Planning Part 2 (避障)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Android单元测试 - 几个重要问题
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Angularjs之国际化
  • crontab执行失败的多种原因
  • CSS 三角实现
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • LeetCode算法系列_0891_子序列宽度之和
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • SOFAMosn配置模型
  • VUE es6技巧写法(持续更新中~~~)
  • 复习Javascript专题(四):js中的深浅拷贝
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 机器学习中为什么要做归一化normalization
  • 实现简单的正则表达式引擎
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​secrets --- 生成管理密码的安全随机数​
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • $.ajax()
  • (CPU/GPU)粒子继承贴图颜色发射
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (Oracle)SQL优化技巧(一):分页查询
  • (poj1.3.2)1791(构造法模拟)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (黑马点评)二、短信登录功能实现
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (一)UDP基本编程步骤
  • (转)Linux下编译安装log4cxx
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET开发人员必知的八个网站
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2