void SequenceDialog::panAxes(int x_pixels, int y_pixels) { // We could simplify this quite a bit if we set the scroll bar values instead. if (!info_->sainfo()) return; QCustomPlot *sp = ui->sequencePlot; double h_pan = 0.0; double v_pan = 0.0; h_pan = sp->xAxis2->range().size() * x_pixels / sp->xAxis2->axisRect()->width(); if (h_pan < 0) { h_pan = qMax(h_pan, min_left_ - sp->xAxis2->range().lower); } else { h_pan = qMin(h_pan, info_->sainfo()->num_nodes - sp->xAxis2->range().upper); } v_pan = sp->yAxis->range().size() * y_pixels / sp->yAxis->axisRect()->height(); if (v_pan < 0) { v_pan = qMax(v_pan, min_top_ - sp->yAxis->range().lower); } else { v_pan = qMin(v_pan, num_items_ - sp->yAxis->range().upper); } if (h_pan && !(sp->xAxis2->range().contains(min_left_) && sp->xAxis2->range().contains(info_->sainfo()->num_nodes))) { sp->xAxis2->moveRange(h_pan); sp->replot(); } if (v_pan && !(sp->yAxis->range().contains(min_top_) && sp->yAxis->range().contains(num_items_))) { sp->yAxis->moveRange(v_pan); sp->replot(); } }
void LteRlcGraphDialog::panAxes(int x_pixels, int y_pixels) { QCustomPlot *rp = ui->rlcPlot; double h_pan = 0.0; double v_pan = 0.0; // Don't scroll up beyond max range, or below 0 if (((y_pixels > 0) && (rp->yAxis->range().upper > 65536)) || ((y_pixels < 0) && (rp->yAxis->range().lower < 0))) { return; } // Don't scroll left beyond 0. Arguably should be time of first segment. if ((x_pixels < 0) && (rp->xAxis->range().lower < 0)) { return; } h_pan = rp->xAxis->range().size() * x_pixels / rp->xAxis->axisRect()->width(); v_pan = rp->yAxis->range().size() * y_pixels / rp->yAxis->axisRect()->height(); // The GTK+ version won't pan unless we're zoomed. Should we do the same here? if (h_pan) { rp->xAxis->moveRange(h_pan); rp->replot(QCustomPlot::rpQueued); } if (v_pan) { rp->yAxis->moveRange(v_pan); rp->replot(QCustomPlot::rpQueued); } }
void SequenceDialog::resetAxes(bool keep_lower) { if (!info_->sainfo()) return; QCustomPlot *sp = ui->sequencePlot; // Allow space for labels on the top and port numbers on the left. double top_pos = min_top_, left_pos = min_left_; if (keep_lower) { top_pos = sp->yAxis->range().lower; left_pos = sp->xAxis2->range().lower; } double range_span = sp->viewport().width() / sequence_w_; sp->xAxis2->setRange(left_pos, range_span + left_pos); range_span = sp->axisRect()->height() / (one_em_ * 1.5); sp->yAxis->setRange(top_pos, range_span + top_pos); double rmin = sp->xAxis2->range().size() / 2; ui->horizontalScrollBar->setRange((rmin - 0.5) * 100, (info_->sainfo()->num_nodes - 0.5 - rmin) * 100); xAxisChanged(sp->xAxis2->range()); ui->horizontalScrollBar->setValue(ui->horizontalScrollBar->minimum()); // Shouldn't be needed. rmin = (sp->yAxis->range().size() / 2); ui->verticalScrollBar->setRange((rmin - 1.0) * 100, (num_items_ - 0.5 - rmin) * 100); yAxisChanged(sp->yAxis->range()); // It would be exceedingly handy if we could do one or both of the // following: // - Position an axis label above its axis inline with the tick labels. // - Anchor a QCPItemText to one of the corners of a QCPAxis. // Neither of those appear to be possible, so we first call replot in // order to lay out our X axes, place our labels, the call replot again. sp->replot(QCustomPlot::rpQueued); QRect axis_rect = sp->axisRect()->rect(); key_text_->position->setCoords(axis_rect.left() - sp->yAxis->padding() - sp->yAxis->tickLabelPadding() - sp->yAxis->offset(), axis_rect.top() / 2); comment_text_->position->setCoords(axis_rect.right() + sp->yAxis2->padding() + sp->yAxis2->tickLabelPadding() + sp->yAxis2->offset(), axis_rect.top() / 2); sp->replot(QCustomPlot::rpHint); }
void Window::plotHistogram(QVector<double> key, QVector<double> nonEq, QVector<double> eqValue, QVector<double> lutValue) { QCustomPlot *histogramPlot = ui->histogramPlot; histogramPlot->clearGraphs(); // Non Equalized QCPBars *nonEqHistBars = new QCPBars(histogramPlot->xAxis, histogramPlot->yAxis); histogramPlot->addPlottable(nonEqHistBars); nonEqHistBars->setWidth(1); nonEqHistBars->setData(key, nonEq); nonEqHistBars->setPen(Qt::NoPen); nonEqHistBars->setBrush(QColor(10, 140, 70, 160)); // // Equalized // QCPBars *eqHistBars = new QCPBars(histogramPlot->xAxis, histogramPlot->yAxis); // histogramPlot->addPlottable(eqHistBars); // eqHistBars->setWidth(1); // eqHistBars->setData(key, eqValue); // eqHistBars->setPen(Qt::NoPen); // eqHistBars->setBrush(QColor(10, 100, 50, 70)); //// eqHistBars->moveAbove(eqHistBars); // // LUT // QCPGraph *lut = histogramPlot->addGraph(); // lut->setData(key, lutValue); // lut->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssNone, QPen(Qt::black, 1.5), QBrush(Qt::white), 9)); // lut->setLineStyle(QCPGraph::lsStepCenter); // lut->setPen(QPen(QColor(120, 120, 120), 2)); histogramPlot->replot(); histogramPlot->rescaleAxes(); }
void LteRlcGraphDialog::zoomYAxis(bool in) { QCustomPlot *rp = ui->rlcPlot; double v_factor = rp->axisRect()->rangeZoomFactor(Qt::Vertical); if (in) { // Don't want to zoom in *too* far on y axis. if (rp->yAxis->range().size() < 10) { return; } } else { // Don't want to zoom out *too* far on y axis. if (rp->yAxis->range().size() > (65536+10)) { return; } } if (!in) { v_factor = pow(v_factor, -1); } rp->yAxis->scaleRange(v_factor, rp->yAxis->range().center()); rp->replot(QCustomPlot::rpQueued); }
void LBMUIMFlowDialog::resetAxes(bool keep_lower) { QCustomPlot * sp = m_ui->sequencePlot; // Allow space for labels on the top and port numbers on the left. double top_pos = -1.0, left_pos = -0.5; if (keep_lower) { top_pos = sp->yAxis->range().lower; left_pos = sp->xAxis2->range().lower; } double range_ratio = sp->xAxis2->axisRect()->width() / m_node_label_width; sp->xAxis2->setRange(left_pos, range_ratio + left_pos); range_ratio = sp->yAxis->axisRect()->height() / (m_one_em * 1.5); sp->yAxis->setRange(top_pos, range_ratio + top_pos); double rmin = sp->xAxis2->range().size() / 2; m_ui->horizontalScrollBar->setRange((rmin - 0.5) * 100, (m_sequence_analysis.num_nodes - 0.5 - rmin) * 100); xAxisChanged(sp->xAxis2->range()); rmin = (sp->yAxis->range().size() / 2); m_ui->verticalScrollBar->setRange((rmin - 1.0) * 100, (m_num_items - 0.5 - rmin) * 100); yAxisChanged(sp->yAxis->range()); sp->replot(); }
void SequenceDialog::resetAxes(bool keep_lower) { if (!sainfo_) return; QCustomPlot *sp = ui->sequencePlot; // Allow space for labels on the top and port numbers on the left. double top_pos = -1.0, left_pos = -0.5; if (keep_lower) { top_pos = sp->yAxis->range().lower; left_pos = sp->xAxis2->range().lower; } double range_ratio = sp->xAxis2->axisRect()->width() / node_label_w_; sp->xAxis2->setRange(left_pos, range_ratio + left_pos); range_ratio = sp->yAxis->axisRect()->height() / (one_em_ * 1.5); sp->yAxis->setRange(top_pos, range_ratio + top_pos); double rmin = sp->xAxis2->range().size() / 2; ui->horizontalScrollBar->setRange((rmin - 0.5) * 100, (sainfo_->num_nodes - 0.5 - rmin) * 100); xAxisChanged(sp->xAxis2->range()); rmin = (sp->yAxis->range().size() / 2); ui->verticalScrollBar->setRange((rmin - 1.0) * 100, (num_items_ - 0.5 - rmin) * 100); yAxisChanged(sp->yAxis->range()); sp->replot(); }
void MainWindow::addToPlot(std::vector<double> *x, std::vector<double> *y, int graphNum, AlgorithmFactory::ALGORITHM alg) { QCustomPlot *cp = this->ui->plotter; QVector<double> __x = QVector<double>::fromStdVector(*x); QVector<double> __y = QVector<double>::fromStdVector(*y); cp->graph(graphNum)->setData(__x, __y); switch (alg) { default: case AlgorithmFactory::SPHERE: cp->graph(graphNum)->setName("Esfera"); break; case AlgorithmFactory::ROTATED_RASTRIGIN: cp->graph(graphNum)->setName("Rot Rastrigin"); break; case AlgorithmFactory::ROSENBROCK: cp->graph(graphNum)->setName("Rosenbrock"); break; } cp->rescaleAxes(true); cp->replot(); }
void TCPStreamDialog::resetAxes() { QCustomPlot *sp = ui->streamPlot; y_axis_xfrm_.reset(); double pixel_pad = 10.0; // per side sp->rescaleAxes(true); tput_graph_->rescaleValueAxis(false, true); // base_graph_->rescaleAxes(false, true); // for (int i = 0; i < sp->graphCount(); i++) { // sp->graph(i)->rescaleValueAxis(false, true); // } double axis_pixels = sp->xAxis->axisRect()->width(); sp->xAxis->scaleRange((axis_pixels + (pixel_pad * 2)) / axis_pixels, sp->xAxis->range().center()); if (sp->yAxis2->visible()) { double ratio = sp->yAxis2->range().size() / sp->yAxis->range().size(); y_axis_xfrm_.translate(0.0, sp->yAxis2->range().lower - (sp->yAxis->range().lower * ratio)); y_axis_xfrm_.scale(1.0, ratio); } axis_pixels = sp->yAxis->axisRect()->height(); sp->yAxis->scaleRange((axis_pixels + (pixel_pad * 2)) / axis_pixels, sp->yAxis->range().center()); sp->replot(); }
void viewGVpropertieslayout::removeAllGraphs() { // first get a pointer to the current plot! QCustomPlot * currPlot = (QCustomPlot *) currentSubWindow->widget(); currPlot->clearGraphs(); currPlot->replot(); }
void SequenceDialog::panAxes(int x_pixels, int y_pixels) { QCustomPlot *sp = ui->sequencePlot; double h_pan = 0.0; double v_pan = 0.0; h_pan = sp->xAxis2->range().size() * x_pixels / sp->xAxis2->axisRect()->width(); v_pan = sp->yAxis->range().size() * y_pixels / sp->yAxis->axisRect()->height(); // The GTK+ version won't pan unless we're zoomed. Should we do the same here? if (h_pan) { sp->xAxis2->moveRange(h_pan); sp->replot(); } if (v_pan) { sp->yAxis->moveRange(v_pan); sp->replot(); } }
bool TimeseriesGraph::update(const GRT::VectorDouble &sample ){ if( !initialized ) return false; //Add the new sample to the buffer data.push_back( sample ); //If the plot is hidden then there is no point in updating the graph if( this->isHidden() ){ if( !lockRanges ){ //Reset the min and max values minRange = 99e+99; maxRange = -minRange; } return true; } QCustomPlot *plot = ui->graph; //Clear any previous graphs plot->clearGraphs(); //Get the data to plot QVector<double> x( graphWidth ); vector< QVector<double> > y(numDimensions, QVector<double>(graphWidth) ); for (unsigned int i=0; i<graphWidth; i++) { x[i] = i; for(unsigned int j=0; j<numDimensions; j++){ y[j][i] = data[i][j]; if( !lockRanges ){ if( data[i][j] < minRange ) minRange = data[i][j]; else if( data[i][j] > maxRange ) maxRange = data[i][j]; } } } //Create the graphs for(unsigned int j=0; j<numDimensions; j++){ plot->addGraph(); plot->graph(j)->setPen( QPen( colors[j%colors.size()] )); plot->graph(j)->setData(x, y[j]); } // give the axes some labels: plot->xAxis->setLabel("Time"); plot->yAxis->setLabel("Values"); // set axes ranges, so we see all data: plot->xAxis->setRange(0, graphWidth); plot->yAxis->setRange(minRange, maxRange); plot->replot(); return true; }
void viewGVpropertieslayout::removeSelectedGraph() { // first get a pointer to the current plot! QCustomPlot * currPlot = (QCustomPlot *) currentSubWindow->widget(); if (currPlot->selectedGraphs().size() > 0) { currPlot->removeGraph(currPlot->selectedGraphs().first()); currPlot->replot(); } }
void MainWindow::on_listView_clicked(const QModelIndex &index) { //QModelIndex a = ui->listView->selectedIndexes().back(); QVariant selected = dataModel->compNameList->data(index,Qt::DisplayRole); dataModel->dataViewComp = selected.toString(); QVector<double> dataViewPrice = dataModel->priceBuff.value(selected.toString()); QVector<double> xval; QVector<double> baseVal; if(dataViewPrice.empty()) return; double min = dataViewPrice[0]; for(auto &i : dataViewPrice) min = std::fmin(min,i); for(int i = 0; i<dataViewPrice.size(); i++){ xval<<i; baseVal<<min; } QCustomPlot* p = ui->qcpDataView;; p->clearGraphs(); QCPGraph* timeline = new QCPGraph(p->xAxis,p->yAxis); timeline->addData(xval,dataViewPrice); QCPGraph* base = new QCPGraph(p->xAxis,p->yAxis); base->setData(xval,baseVal); p->addPlottable(timeline); p->addPlottable(base); timeline->setChannelFillGraph(base); timeline->setPen(QPen(QColor(0,0,0,0))); timeline->setBrush(QColor(0,0,255,100)); //QVector<double> ticks; QVector<QString> labels; int L = this->dataModel->dateBuff.values()[0].size()-1; int len = 6; float step = (float)L/(float)len; for(int i = 0; i<= len; i++){ labels<<this->dataModel->dateBuff.values()[0][i*step].toString("MM/yy"); } p->xAxis->setTickVectorLabels(labels); p->xAxis->setAutoTicks(true); p->xAxis->setAutoTickLabels(false); p->xAxis->setTickLabelRotation(-60); //p->xAxis->setSubTickCount(0); //p->xAxis->setTickLength(0, len-1); p->xAxis->grid()->setVisible(true); //p->xAxis->setRange(0, len-2); //p->xAxis->setTickVector(ticks); p->rescaleAxes(); p->replot(); }
void ChartPage::on_rbDay_clicked() { ui->rbMonth->setChecked(false); ui->rbWeek->setChecked(false); rangeChoice = Day; QCustomPlot *customPlot = ui->chartBlock; double mupper = customPlot->xAxis->range().upper; customPlot->xAxis->setRange(mupper - rangeChoice, mupper); customPlot->replot(); }
void TCPStreamDialog::zoomYAxis(bool in) { QCustomPlot *sp = ui->streamPlot; double v_factor = sp->axisRect()->rangeZoomFactor(Qt::Vertical); if (!in) { v_factor = pow(v_factor, -1); } sp->yAxis->scaleRange(v_factor, sp->yAxis->range().center()); sp->replot(); }
void LteRlcGraphDialog::zoomXAxis(bool in) { QCustomPlot *rp = ui->rlcPlot; double h_factor = rp->axisRect()->rangeZoomFactor(Qt::Horizontal); if (!in) { h_factor = pow(h_factor, -1); } rp->xAxis->scaleRange(h_factor, rp->xAxis->range().center()); rp->replot(QCustomPlot::rpQueued); }
void TCPStreamDialog::zoomXAxis(bool in) { QCustomPlot *sp = ui->streamPlot; double h_factor = sp->axisRect()->rangeZoomFactor(Qt::Horizontal); if (!in) { h_factor = pow(h_factor, -1); } sp->xAxis->scaleRange(h_factor, sp->xAxis->range().center()); sp->replot(); }
void MainWindow::updatePlots() { for(int k=0;k<plotList->size();k++) { QCustomPlot *customPlot = ui->plotArea->findChild<QCustomPlot*>(plotList->value(k)); customPlot->addGraph(); // customPlot->graph(0)->addData(i,i*2); customPlot->xAxis->setLabel("x"); customPlot->yAxis->setLabel("y"); // set axes ranges, so we see all data: customPlot->xAxis->setRange(-100, 100); customPlot->yAxis->setRange(-1000, 1000); customPlot->replot(); } }
bool BarGraph::update(const GRT::VectorDouble &sample ) { if( !initialized ) return false; this->data = sample; //If the plot is hidden then there is no point in updating the graph if( this->isHidden() ) { return true; } QCustomPlot *plot = ui->graph; QVector<double> keyData; QVector<double> valueData; QVector<double> tickVector; QVector<QString> tickLabels; const unsigned int K = (unsigned int)data.size(); plot->clearPlottables(); QCPBars *bar = new QCPBars(plot->xAxis,plot->yAxis); plot->addPlottable( bar ); //Add the data to the graph for(unsigned int k=0; k<K; k++) { keyData << k+1; valueData << data[k]; } bar->setData(keyData, valueData); //Add the tick labels for(unsigned int k=0; k<K; k++) { tickVector << double(k+1); tickLabels << QString::fromStdString( GRT::Util::intToString( k+1 ) ); } plot->xAxis->setAutoTicks(false); plot->xAxis->setAutoTickLabels(false); plot->xAxis->setTickVector( tickVector ); plot->xAxis->setTickVectorLabels( tickLabels ); plot->xAxis->setLabel("Features"); plot->yAxis->setLabel("Values"); plot->rescaleAxes(); plot->replot(); return true; }
MissionElevationDisplay::MissionElevationDisplay(QWidget *parent) : QWidget(parent), ui(new Ui::MissionElevationDisplay), m_uasInterface(NULL), m_uasWaypointMgr(NULL), m_totalDistance(0), m_elevationData(NULL), m_useHomeAltOffset(false), m_homeAltOffset(0.0), m_elevationShown(false) { ui->setupUi(this); ui->sampleSpinBox->setEnabled(false); QCustomPlot* customPlot = ui->customPlot; customPlot->addGraph(); // Mission Elevation Graph (ElevationGraphMissionId) customPlot->graph(ElevationGraphMissionId)->setPen(QPen(Qt::blue)); // line color blue for mission data customPlot->graph(ElevationGraphMissionId)->setBrush(QBrush(QColor(0, 0, 255, 20))); // first graph will be filled with translucent blue customPlot->addGraph(); // Google Elevation Graph (ElevationGraphElevationId) customPlot->graph(ElevationGraphElevationId)->setPen(QPen(Qt::red)); // line color red for elevation data customPlot->graph(ElevationGraphElevationId)->setBrush(QBrush(QColor(255, 0, 0, 20))); // first graph will be filled with translucent blue customPlot->graph(ElevationGraphElevationId)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDiamond, 10)); customPlot->xAxis->setLabel("distance (m)"); customPlot->yAxis->setLabel("altitude (m)"); // set default ranges for Alt and distance customPlot->xAxis->setRange(0,ElevationDefaultDistanceMax); //m customPlot->yAxis->setRange(ElevationDefaultAltMin,ElevationDefaultAltMax); //m QFont legendFont = font(); legendFont.setPointSize(9); customPlot->legend->setFont(legendFont); // set a more compact font size for bottom and left axis tick labels: customPlot->xAxis->setTickLabelFont(QFont(QFont().family(), 9)); customPlot->xAxis->setLabelFont(QFont(QFont().family(), 9)); customPlot->yAxis->setTickLabelFont(QFont(QFont().family(), 9)); customPlot->yAxis->setLabelFont(QFont(QFont().family(), 9)); customPlot->replot(); connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(activeUASSet(UASInterface*))); activeUASSet(UASManager::instance()->getActiveUAS()); connect(ui->infoButton, SIGNAL(clicked()), this, SLOT(showInfoBox())); }
void CompassMotorCalibrationDialog::compassMotCalibration(mavlink_compassmot_status_t *compassmot_status) { if (!m_uasInterface) return; // no active UAS. QCustomPlot* customPlot = ui->customPlot; int index = compassmot_status->throttle/10; customPlot->graph(GRAPH_ID_CURRENT)->addData(index, compassmot_status->current); customPlot->graph(GRAPH_ID_INTERFERENCE)->addData(index, compassmot_status->interference); customPlot->replot(); x_scalar = compassmot_status->CompensationX; y_scalar = compassmot_status->CompensationY; z_scalar = compassmot_status->CompensationZ; }
CompassMotorCalibrationDialog::CompassMotorCalibrationDialog(QWidget *parent) : QDialog(parent), ui(new Ui::CompassMotorCalibrationDialog), m_uasInterface(NULL) { ui->setupUi(this); QCustomPlot* customPlot = ui->customPlot; customPlot->addGraph(); customPlot->graph(GRAPH_ID_INTERFERENCE)->setPen(QPen(GRAPH_COLOR_INTERFERENCE)); // line color blue for first graph customPlot->graph(GRAPH_ID_INTERFERENCE)->setBrush(QBrush(GRAPH_COLOR_INTERFERENCE_FILL)); // first graph will be filled with translucent blue customPlot->xAxis->setLabel("Throttle (%)"); customPlot->yAxis->setLabel("Interference (%)"); customPlot->yAxis->setLabelColor(GRAPH_COLOR_INTERFERENCE); customPlot->xAxis->setRange(0,100); customPlot->yAxis->setRange(0,100); customPlot->addGraph(); customPlot->graph(GRAPH_ID_CURRENT)->setPen(QPen(GRAPH_COLOR_CURRENT)); // line color red for second graph customPlot->graph(GRAPH_ID_CURRENT)->setBrush(QBrush(GRAPH_COLOR_CURRENT_FILL)); customPlot->yAxis2->setVisible(true); customPlot->yAxis2->setLabel("Amps (A)"); customPlot->yAxis2->setLabelColor(GRAPH_COLOR_CURRENT); customPlot->xAxis2->setRange(0,100); customPlot->yAxis2->setRange(0,50); customPlot->replot(); connect(ui->okButton, SIGNAL(clicked()), this, SLOT(okButtonClicked())); connect(this, SIGNAL(about), this, SLOT(rejected())); connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(activeUASSet(UASInterface*))); activeUASSet(UASManager::instance()->getActiveUAS()); int ok = QMessageBox::warning(this, "Compass Motor Calibration", tr("CAUTION: Starting the compass motor calibration arms the motors.\n" "Please make sure you have read and followed all instructions" "before untertaking the calibration as serious injury could occur!"), QMessageBox::Ok, QMessageBox::Cancel); if (ok == QMessageBox::Cancel){ QTimer::singleShot(100, this, SLOT(cancelCalibration())); } }
void Snakes::drawPlot(std::vector<double> inputX, std::vector<double> inputY) { QCustomPlot *customPlot = new QCustomPlot(); customPlot->resize(500, 500); QVector<double> x = QVector<double>::fromStdVector(inputX); QVector<double> y = QVector<double>::fromStdVector(inputY); customPlot->addGraph(); customPlot->graph(0)->setData(x, y); customPlot->xAxis->setLabel("x"); customPlot->yAxis->setLabel("y"); customPlot->xAxis->setRange(inputX.front(), inputX.back()); customPlot->yAxis->setRange(inputY.front(), inputY.back()); customPlot->replot(); customPlot->show(); }
void ChartPage::addChartPoints() { if (this->buildingChart) return; this->buildingChart=true; ClientModel *model = this->clientModel; QCustomPlot *customPlot = ui->chartBlock; // generate some data: QVector<double> x(250), y(250); int maxBlocks = 0; maxBlocks = model->getNumBlocks() - this->lastBlockHeight; if (maxBlocks == 0) return; if (maxBlocks > 250) { maxBlocks = 250; } else { this->timer->stop(); } int i; for (i = 0; i < maxBlocks; i++) { CBlock blk = model->getBlock(i + this->lastBlockHeight); CBlockIndex* cIndex = model->getBlockIndex(i + this->lastBlockHeight); x[i]=blk.GetBlockTime(); y[i]=model->getDiff(cIndex); } if (this->lastBlockHeight > 0) { customPlot->graph(0)->addData(x, y); } else { customPlot->graph(0)->setData(x, y); } customPlot->xAxis->setRange(x[i-1] - rangeChoice, x[i-1]); customPlot->replot(); this->buildingChart=false; this->lastBlockHeight += i; }
void MainWindow::runOptimization() { if (m_CostFunc.IsNull() || g_pointList.size() == 0) { return; } OptimizerParameters initialParams; ConvertListOfPointVectorsToParameters(g_pointList, initialParams); OptimizerProgress::Pointer progress = OptimizerProgress::New(); progress->SetParticlesHistory(&g_pointHistory); OptimizerParameters result; if (ui.optiCG->isChecked()) { result = optimizeByFRPR(m_CostFunc, initialParams, progress); } else if (ui.optiGD->isChecked()) { result = optimizeByGD(m_CostFunc, initialParams, progress); } else if (ui.optiLBFGS->isChecked()) { result = optimizeByLBFGS(m_CostFunc, initialParams, progress); } // draw cost function ConvertParametersToListOfPointVectors(result, g_pointList.size(), g_pointList[0].size(), g_pointList); QVector<double> x(g_costHistory.size()), y(g_costHistory.size()); // initialize with entries 0..100 for (int i = 0; i < x.count(); ++i) { x[i] = i; y[i] = g_costHistory[i]; } QCustomPlot* customPlot = ui.customPlot; customPlot->clearGraphs(); // create graph and assign data to it: customPlot->addGraph(); customPlot->graph(0)->setData(x, y); customPlot->rescaleAxes(); // give the axes some labels: customPlot->xAxis->setLabel("iteration"); customPlot->yAxis->setLabel("cost"); customPlot->replot(); updateScene(); }
void LteRlcGraphDialog::mouseReleased(QMouseEvent *event) { QCustomPlot *rp = ui->rlcPlot; if (rubber_band_) { rubber_band_->hide(); if (!mouse_drags_) { QRectF zoom_ranges = getZoomRanges(QRect(rb_origin_, event->pos())); if (zoom_ranges.width() > 0.0 && zoom_ranges.height() > 0.0) { rp->xAxis->setRangeLower(zoom_ranges.x()); rp->xAxis->setRangeUpper(zoom_ranges.x() + zoom_ranges.width()); rp->yAxis->setRangeLower(zoom_ranges.y()); rp->yAxis->setRangeUpper(zoom_ranges.y() + zoom_ranges.height()); rp->replot(); } } } else if (rp->cursor().shape() == Qt::ClosedHandCursor) { rp->setCursor(QCursor(Qt::OpenHandCursor)); } }
void MainWindow::maximizarGrafico1(QMouseEvent* e) { QVector<double> x(100); QVector<double> y(100); wgraficos *w = new wgraficos(); w->exec(); QCustomPlot * graph = w->getDatos(); graph->addGraph(); for (int i = 0; i < 100; ++i) { x[i] = i; y[i] = rand(); } graph->graph(0)->setData(x,y); graph->replot(); }
void LteRlcGraphDialog::resetAxes() { QCustomPlot *rp = ui->rlcPlot; QCPRange x_range = rp->xAxis->scaleType() == QCPAxis::stLogarithmic ? rp->xAxis->range().sanitizedForLogScale() : rp->xAxis->range(); double pixel_pad = 10.0; // per side rp->rescaleAxes(true); base_graph_->rescaleValueAxis(false, true); double axis_pixels = rp->xAxis->axisRect()->width(); rp->xAxis->scaleRange((axis_pixels + (pixel_pad * 2)) / axis_pixels, x_range.center()); axis_pixels = rp->yAxis->axisRect()->height(); rp->yAxis->scaleRange((axis_pixels + (pixel_pad * 2)) / axis_pixels, rp->yAxis->range().center()); rp->replot(QCustomPlot::rpQueued); }
bool FeaturePlot::plot(){ if( !initialized ) return false; QCustomPlot *plot = ui->plot; //Clear any previous graphs plot->clearGraphs(); const unsigned int M = data.getNumSamples(); const unsigned int K = data.getNumClasses(); const unsigned int N = data.getNumDimensions(); GRT::Vector< GRT::MinMax > ranges = data.getRanges(); GRT::Vector< unsigned int > classLabels = data.getClassLabels(); GRT::Vector< GRT::ClassTracker > classTracker = data.getClassTracker(); double minRange = GRT::grt_numeric_limits<double>::max(); double maxRange = -minRange; //Add a new graph for each class for(unsigned int k=0; k<K; k++){ const unsigned int numSamplesInClass = classTracker[k].counter; if( numSamplesInClass > 0 ){ QVector< double > x( numSamplesInClass ); QVector< double > y( numSamplesInClass ); plot->addGraph(); plot->graph(k)->setPen( QPen( classColors[ k % classColors.size() ] ) ); plot->graph(k)->setLineStyle( QCPGraph::lsNone ); plot->graph(k)->setScatterStyle( QCPScatterStyle(QCPScatterStyle::ssCross, 4) ); unsigned int index = 0; for(unsigned int i=0; i<M; i++) { if( data[i].getClassLabel() == classTracker[k].classLabel ){ x[ index ] = data[i][ axisIndexX ]; y[ index ] = data[i][ axisIndexY ]; index++; for(unsigned int j=0; j<N; j++){ if( data[i][j] > maxRange ){ maxRange = data[i][j]; }else if( data[i][j] < minRange ){ minRange = data[i][j]; } } } } // pass data points to graphs: plot->graph( k )->setData(x, y); } } //Add 20% to the min and max range minRange += minRange * 0.2; maxRange += maxRange * 0.2; plot->xAxis->setVisible( true ); plot->xAxis->setTickLabels( true ); plot->yAxis->setVisible( true ); plot->yAxis->setTickLabels( true ); plot->xAxis->setLabel( QString::fromStdString("X Axis Index: " + GRT::Util::toString(axisIndexX)) ); plot->yAxis->setLabel( QString::fromStdString("Y Axis Index: " + GRT::Util::toString(axisIndexY)) ); plot->xAxis->setRange(minRange, maxRange); plot->yAxis->setRange(minRange, maxRange); plot->replot(); plot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables); return true; }