void plot_analytics::plotAnalyze( QCPGraph *target, plotStats *stats, QCPRange keyRange) { QCPGraphDataContainer::const_iterator plotIterator = target->data().data()->findBegin(keyRange.lower,true); QCPGraphDataContainer::const_iterator targetDataEnd = target->data().data()->findEnd(keyRange.upper,true); QCPGraphData currentPoint, prevPoint; //Find the data ranges currentPoint.key = keyRange.lower; prevPoint = QCPGraphData(plotIterator->key, plotIterator->value); while(plotIterator != targetDataEnd && (keyRange.contains(plotIterator->key) || stats->totalData_entrys < 2)) { currentPoint = QCPGraphData(plotIterator->key, plotIterator->value); handlePoints(currentPoint, prevPoint, stats); //Value is weighted to account for datapoints that may not be equally spaced if(!isInvalidData(currentPoint.value) && !isInvalidData(prevPoint.value)) stats->avgValue += currentPoint.value*(currentPoint.key-prevPoint.key); prevPoint = QCPGraphData(plotIterator->key, plotIterator->value); ++plotIterator; } //Divide by total seconds stats->avgValue /= stats->totalData_seconds; }
void ScatterWidget::setData(const std::vector<PointD> &data, string legend) { QCPGraph *graph = NULL; int nG = ui->scatter->graphCount(); for(int i=0; i<nG; i++) { if(ui->scatter->graph(i)->name() == QString::fromStdString(legend)) { graph = ui->scatter->graph(i); break; } } if(!graph) { graph = ui->scatter->addGraph(); // ----------------------- Scatter Configuration --------------------------- graph->setName(QString::fromStdString(legend)); QColor color_ = colorManager.getNewDifferentColor(); graph->setPen(QPen(color_)); graph->setLineStyle(QCPGraph::lsNone); graph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssPlusCircle, 4)); ui->scatter->legend->setVisible(true); } double min_x = INFINITY, min_y = INFINITY; double max_x = -INFINITY, max_y = -INFINITY; QVector<QCPGraphData> q_data(data.size()); for(unsigned int i=0; i<data.size(); i++) { q_data[i] = QCPGraphData(data[i].x, data[i].y); if(ui->recButton->isChecked()) { vector<double> vec2_double(2); vec2_double[0] = data[i].x; vec2_double[1] = data[i].y; vector<string> vec2_string(2); vec2_string[0] = legend + "_x"; vec2_string[1] = legend + "_y"; logger.addLogCsv(graph->dataCount(), vec2_string, vec2_double); } max_x = qMax(data[i].x, ui->scatter->xAxis->range().upper); min_x = qMin(data[i].x, ui->scatter->xAxis->range().lower); max_y = qMax(data[i].y, ui->scatter->yAxis->range().upper); min_y = qMin(data[i].y, ui->scatter->yAxis->range().lower); } graph->data()->set(q_data); ui->scatter->xAxis->setRange(min_x, max_x); ui->scatter->yAxis->setRange(min_y, max_y); ui->scatter->replot(); }