EIS/host/src/GraphWidget.cpp

89 lines
2.3 KiB
C++

#include "GraphWidget.h"
#include <QVBoxLayout>
GraphWidget::GraphWidget(QWidget *parent) : QWidget(parent)
{
QVBoxLayout *layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
plot = new JKQTPlotter(this);
layout->addWidget(plot);
// Initialize Graphs
graphY1 = new JKQTPXYLineGraph(plot);
graphY2 = new JKQTPXYLineGraph(plot);
// Styling Y1 (e.g., Blue)
graphY1->setColor(QColor("blue"));
graphY1->setSymbolColor(QColor("blue"));
graphY1->setSymbol(JKQTPCircle);
graphY1->setSymbolSize(7);
graphY1->setLineWidth(2);
// Styling Y2 (e.g., Red)
graphY2->setColor(QColor("red"));
graphY2->setSymbolColor(QColor("red"));
graphY2->setSymbol(JKQTPTriangle);
graphY2->setSymbolSize(7);
graphY2->setLineWidth(2);
plot->addGraph(graphY1);
plot->addGraph(graphY2);
}
void GraphWidget::setupPlot(QString title, QString xLabel, QString y1Label, QString y2Label)
{
// Basic Settings
plot->getPlotter()->setPlotLabel(title);
plot->getXAxis()->setAxisLabel(xLabel);
// Y-Axis setup
plot->getYAxis()->setAxisLabel(y1Label); // Left Axis
// If we want a secondary axis for Y2, JKQTPlotter supports it,
// but for simplicity here we might plot on the same if scales are similar,
// or rely on user interpretation.
// For Bode (Ohm vs Degree), scales are vastly different.
// Ideally, Y2 should be on the right axis.
// Assign Y1 to Left Axis
graphY1->setTitle(y1Label);
// Assign Y2 to Right Axis (if supported by specific JKQT config, otherwise same axis)
// Assuming simple usage for now:
graphY2->setTitle(y2Label);
// Enable Legend
plot->getPlotter()->setShowKey(true);
}
void GraphWidget::setLogAxis(bool logX, bool logY)
{
plot->getXAxis()->setLogAxis(logX);
plot->getYAxis()->setLogAxis(logY);
}
void GraphWidget::addData(double x, double y1, double y2)
{
xData.append(x);
y1Data.append(y1);
y2Data.append(y2);
// Update graph data pointers
graphY1->setXColumn(xData);
graphY1->setYColumn(y1Data);
graphY2->setXColumn(xData);
graphY2->setYColumn(y2Data);
// Redraw
plot->redrawPlot();
}
void GraphWidget::clear()
{
xData.clear();
y1Data.clear();
y2Data.clear();
plot->redrawPlot();
}