首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未显示QChart对数轴数据

未显示QChart对数轴数据
EN

Stack Overflow用户
提问于 2018-09-19 21:39:20
回答 1查看 828关注 0票数 2

我有一个2Y轴plo,在y1上有QValueAxis,在y2上有QLogValueAxis

显示线性图,不显示对数图。两者的数据是相同的。

我想知道如何设置对数轴的刻度和限制?

代码如下:

代码语言:javascript
复制
chart = new QChart();
chart->legend()->hide();
chart->setTitle("Histogramm");

axisX = new QValueAxis;
axisX->setLabelFormat("%g");
chart->addAxis(axisX, Qt::AlignBottom);

series = new QLineSeries;
chart->addSeries(series);

axisY = new QValueAxis;
axisY->setTitleText("linear scale");
axisY->setLinePenColor(series->pen().color());

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

serieslog = new QLineSeries;
chart->addSeries(serieslog);


axisY3 = new QLogValueAxis();
axisY3->setTitleText("logarithmic scale");
axisY3->setBase(10.0);
axisY3->setLinePenColor(serieslog->pen().color());

chart->addAxis(axisY3, Qt::AlignRight);
serieslog->attachAxis(axisX);
serieslog->attachAxis(axisY3);

chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);

// Create a layout and add Chart
QGridLayout *layout = new QGridLayout(this);
layout->addWidget(chartView);

void WidgetHistogramm::setData(const std::vector<int> data)
{
    if (data.size() <= 0)
    {
        LOG_DEBUG() << "Histogram Data empty";
        return;
    }

    auto max = *max_element(std::begin(data), std::end(data));

    QVector<QPointF> points(data.size());

    for(std::vector<int>::size_type i = 0; i != data.size(); ++i) {
      points[i] = QPointF(i, data[i]*100/max);
    }

    series->replace(points);
    serieslog->replace(points);

    chart->axisX(series)->setRange(0, data.size());
    chart->axisY(series)->setRange(0, 100);
    chart->axisX(serieslog)->setRange(0, data.size());
    chart->axisY(serieslog)->setRange(-1000, 1);
}
EN

回答 1

Stack Overflow用户

发布于 2018-09-19 23:40:06

该范围不是指缩放值,而是指实际值,例如,在您的示例中,它应该是从epsilon到100。另一方面,对数刻度中显示的值必须为正,在您的情况下,我看到有零,因此一个可能的解决方案是添加epsilon:

代码语言:javascript
复制
void WidgetHistogramm::setData(const std::vector<int> data)
{
    if (data.size() <= 0){
        LOG_DEBUG() << "Histogram Data empty";
        return;
    }

    auto max = *max_element(std::begin(data), std::end(data));

    QVector<QPointF> points(data.size());

    for(std::vector<int>::size_type i = 0; i != data.size(); ++i) {
        points[i] = QPointF(i, data[i]*100.0/max + std::numeric_limits<qreal>::epsilon());
    }

    series->replace(points);
    serieslog->replace(points);

    chart->axisX(series)->setRange(0, points.size());
    chart->axisY(series)->setRange(0, 100);
    chart->axisX(serieslog)->setRange(0, points.size());
    chart->axisY(serieslog)->setRange( std::numeric_limits<qreal>::epsilon(), 100);
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52407267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档