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

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中之前已有的曲线和坐标轴,否则会出现多个坐标轴和曲线的情况,如下:

 


http://www.kler.cn/a/304016.html

相关文章:

  • Stable Diffusion:照片转视频插件
  • sql专题 之 sql的执行顺序
  • Python 小高考篇(2)字符串
  • 运行springBlade项目历程
  • SQL50题
  • 【LeetCode】【算法】19. 删除链表的倒数第N个结点
  • JVM内部结构解析
  • Redis 高可用
  • 9月14日,每日信息差
  • css的选择器有哪些?权重由大到小是怎么排序的?
  • 深度学习:怎么看pth文件的参数
  • 工厂方法模式和抽象工厂模式
  • 考试:软件工程(01)
  • 非网站业务怎么接入高防IP抗DDoS
  • [PICO VR眼镜]眼动追踪串流Unity开发与使用方法,眼动追踪打包报错问题解决(Eye Tracking)
  • HTML5中Checkbox标签的深入全面解析
  • 位段、枚举、联合
  • Hazel 2024
  • 24.9.14学习笔记
  • 构造函数与析构函数的执行顺序
  • 多个系统运维压力大?统一运维管理为IT轻松解忧
  • 计算机网络八股总结
  • 使用vscode上传git远程仓库流程(Gitee)
  • uniapp点击跳转到对应位置
  • 写在OceanBase开源三周年
  • [项目][WebServer][日志设计]详细讲解