Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未显示QChart测井轴数据_C++_Qt_Qt5_Qtcharts - Fatal编程技术网

C++ 未显示QChart测井轴数据

C++ 未显示QChart测井轴数据,c++,qt,qt5,qtcharts,C++,Qt,Qt5,Qtcharts,我有一个2Y轴plo,y1上有一个QValueAxis,y2上有一个QLogValueAxis 显示线性图,不显示对数图。两者的数据相同。 我想知道如何设置日志轴的刻度和限制 代码如下: chart = new QChart(); chart->legend()->hide(); chart->setTitle("Histogramm"); axisX = new QValueAxis; axisX->setLabelFormat("%g"); chart->a

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

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

我想知道如何设置日志轴的刻度和限制

代码如下:

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);
}
chart=新的QChart();
图表->图例()->隐藏();
图表->设置标题(“历史程序”);
axisX=新的QValueAxis;
axisX->setLabelFormat(“%g”);
图表->添加轴(axisX,Qt::AlignBottom);
系列=新的QLineSeries;
图表->添加系列(系列);
axisY=新的QValueAxis;
axisY->setTitleText(“线性比例”);
axisY->setLinePenColor(系列->画笔().color());
图表->添加轴(axisY,Qt::AlignLeft);
系列->attachAxis(axisX);
系列->附加轴(轴);
serieslog=新的QLineSeries;
图表->添加系列(系列日志);
axisY3=新的QLogValueAxis();
axisY3->setTitleText(“对数刻度”);
axisY3->setBase(10.0);
axisY3->setLinePenColor(序列日志->笔().color());
图表->添加轴(axisY3,Qt::AlignRight);
serieslog->attachAxis(axisX);
serieslog->attachAxis(axisY3);
图表视图=新的QChartView(图表);
图表视图->SetRenderInt(QPaint::抗锯齿);
//创建布局并添加图表
QGridLayout*layout=新的QGridLayout(本);
布局->添加小部件(图表视图);
void WidgetHistorogram::setData(常量std::向量数据)
{
if(data.size()替换(点);
图表->axisX(系列)->setRange(0,data.size());
图表->轴(系列)->设置范围(01100);
图表->axisX(serieslog)->setRange(0,data.size());
图表->axisY(serieslog)->设置范围(-1000,1);
}

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

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);
}
void WidgetHistorogram::setData(const std::vector data)
{
if(data.size()替换(点);
图表->axisX(系列)->设置范围(0,points.size());
图表->轴(系列)->设置范围(01100);
图表->axisX(serieslog)->设置范围(0,points.size());
图表->axisY(serieslog)->设置范围(标准::数值限制::ε(),100);
}