Huier_YFB 2024-07-04 16:29 采纳率: 0%
浏览 4

QChart横坐标轴如何编码?

img

图一

我想用QChart,QLogValueAxis画一个上图的坐标轴,结果画成这样了:

img


横坐标轴不对,代码如下:


QLineSeries* series = new QLineSeries();
    series->append(250, 10);
    series->append(500, 20);
    series->append(1000, 30);
    series->append(2000, 40);
    series->append(4000, 50);
    series->append(8000, 60);

    chart = new QChart(); //创建chart
    chart->addSeries(series);

    // 使用 QLogValueAxis 设置对数刻度轴
    QLogValueAxis* axisX = new QLogValueAxis();
    axisX->setBase(2);
    axisX->setTitleText("Frequency (Hz)");
    axisX->setLabelFormat("%d"); // 设置标签格式
    axisX->setMinorTickCount(1); // 取消小刻度
    axisX->setRange(250, 8000);

    QValueAxis* axisY = new QValueAxis();
    axisY->setRange(0, 70);
    axisY->setTitleText(tr("Gain(db)"));
    axisY->setTickCount(8);
    axisY->setLabelFormat("%.1f"); //标签格式

    chart->addAxis(axisX, Qt::AlignBottom);
    series->attachAxis(axisX);
    chart->addAxis(axisY, Qt::AlignLeft);
    series->attachAxis(axisY);

    chart->setAnimationOptions(QChart::SeriesAnimations);
    chart->layout()->setContentsMargins(0, 0, 0, 0);//设置外边界全部为0
    chart->setMargins(QMargins(0, 0, 0, 0));//设置内边界全部为0
    chart->setBackgroundRoundness(0); //设置背景区域无圆角
    ui->chartView->setChart(chart); //为ChartView设置chart
    ui->chartView->setRenderHint(QPainter::Antialiasing);

该怎么处理,横坐标轴可以实现图一效果,谢谢。

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-04 16:29
    关注

    引自免费微信小程序:皆我百晓生

    根据你提供的描述和图例,你似乎想要在 QChart 中创建一个横坐标轴,其刻度值类似于图1的格式。然而,根据你的代码示例,看起来你正在使用对数刻度轴(QLogValueAxis)并遇到了问题。为了更好地满足你的需求,我会给出一些指导建议。

    首先,你希望创建一个标准的线性横坐标轴,而不是对数刻度轴。因为图1中的值似乎是线性排列的,并没有使用对数映射。为了做到这一点,你应该使用 QValueAxis 而不是 QLogValueAxis 来创建横坐标轴。这是设置线性横坐标轴的基本步骤:

    1. 创建 QValueAxis 实例作为横坐标轴。
    2. 设置横坐标轴的标题、范围和刻度值。
    3. 将这个横坐标轴添加到图表中,并将序列附加到这个横坐标轴上。

    根据你的数据,横坐标轴应该这样设置:

    QValueAxis *axisX = new QValueAxis();
    axisX->setRange(0, 8000); // 设置横坐标范围
    axisX->setTitleText("Frequency (Hz)"); // 设置标题
    axisX->setTickCount(10); // 设置刻度数量或间隔,根据你的需要调整这个值
    axisX->setLabelFormat("%.0f"); // 设置标签格式,这里使用了整数格式
    // 其他设置如标题对齐等...
    chart->addAxis(axisX, Qt::AlignBottom); // 将横坐标轴添加到图表底部
    series->attachAxis(axisX); // 将序列附加到横坐标轴上
    

    接下来,你需要确保纵坐标轴(增益)正确地显示在图表的另一侧。你已经创建了纵坐标轴 axisY 并进行了适当的设置。只需确保它正确地附加到图表上即可。你的代码中这一部分看起来是正确的。

    这样设置后,你的横坐标轴应该会根据图1中的数据进行显示。如果你的数据确实是非线性的(例如,存在间隔较大的跳跃),那么可能需要使用对数刻度轴或自定义刻度逻辑来更准确地表示数据。但根据你提供的信息,似乎线性表示就足够了。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月4日

悬赏问题

  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?
  • ¥15 求一个十多年前的国产符号计算软件(MMP)+用户手册
  • ¥15 为什么会突然npm err!啊
  • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢
  • ¥15 vxworks交叉编译gcc报错error: missing binary operator before token "("