41 #include "../disp_global.h" 48 #include <QtCharts/QChart> 49 #include <QtCharts/QSplineSeries> 90 typedef QSharedPointer<Spline>
SPtr;
99 Spline(QWidget* parent = 0,
const QString& title =
"Spline Histogram");
109 void setData(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& matClassLimitData,
110 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData);
112 void setData(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& matClassLimitData,
113 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData);
123 void updatePlot(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
124 const Eigen::VectorXi& matClassFrequencyData);
132 void mousePressEvent(QMouseEvent *event);
144 void splitCoefficientAndExponent(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
146 Eigen::VectorXd& vecCoefficientResults,
147 Eigen::VectorXi& vecExponentValues);
155 void setThreshold(
const QVector3D& vecThresholdValues);
163 const QVector3D& getThreshold();
173 QVector3D correctionDisplayTrueValue(QVector3D vecOriginalValues,
174 QString functionName);
182 void setColorMap (
const QString &colorMap);
196 void updateThreshold (QtCharts::QLineSeries *lineSeries);
217 void borderChanged(
double leftThreshold,
double middleThreshold,
double rightThreshold);
224 template <
typename T>
225 void Spline::setData(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& matClassLimitData,
226 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData)
228 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(matClassLimitData.rows(),1);
229 matrixName.col(0) = matClassLimitData;
230 this->updatePlot(matrixName, matClassFrequencyData);
235 template <
typename T>
236 void Spline::setData(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& matClassLimitData,
237 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData)
239 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1, matClassLimitData.cols());
240 matrixName.row(0) = matClassLimitData;
241 this->updatePlot(matrixName, matClassFrequencyData);
247 void Spline::updatePlot(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
248 const Eigen::VectorXi& matClassFrequencyData)
250 Eigen::VectorXd resultDisplayValues;
251 int iClassAmount = matClassFrequencyData.rows();
252 this->splitCoefficientAndExponent (matClassLimitData, iClassAmount, resultDisplayValues, m_vecResultExponentValues);
255 QString histogramExponent;
256 histogramExponent =
"X-axis scale: 10e" + QString::number(m_vecResultExponentValues(0));
257 m_pSeries->setName(histogramExponent);
259 m_pChart->removeSeries(m_pSeries);
260 m_pChart->removeSeries(m_pLeftThreshold);
261 m_pChart->removeSeries(m_pMiddleThreshold);
262 m_pChart->removeSeries(m_pRightThreshold);
264 m_dMinAxisX = resultDisplayValues(0);
265 m_dMaxAxisX = resultDisplayValues(iClassAmount);
267 m_iMaximumFrequency = 0;
269 for (
int ir = 0; ir < iClassAmount; ++ir)
271 classMark = (resultDisplayValues(ir) + resultDisplayValues(ir+1))/2 ;
272 m_pSeries->append(classMark, matClassFrequencyData(ir));
274 if (matClassFrequencyData(ir) > m_iMaximumFrequency)
276 m_iMaximumFrequency = matClassFrequencyData(ir);
279 m_pLeftThreshold =
new QtCharts::QLineSeries();
280 m_pMiddleThreshold =
new QtCharts::QLineSeries();
281 m_pRightThreshold =
new QtCharts::QLineSeries();
282 m_pLeftThreshold->setName(
"left");
283 m_pMiddleThreshold->setName(
"middle");
284 m_pRightThreshold->setName(
"right");
286 m_pChart->addSeries(m_pSeries);
287 m_pChart->legend()->setVisible(
true);
288 m_pChart->legend()->setAlignment(Qt::AlignBottom);
289 m_pChart->createDefaultAxes();
290 m_pChart->axisX()->setRange(m_dMinAxisX, m_dMaxAxisX);
295 template <
typename T>
296 void Spline::splitCoefficientAndExponent (
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
298 Eigen::VectorXd& vecCoefficientResults,
299 Eigen::VectorXi& vecExponentValues)
301 vecCoefficientResults.resize(iClassAmount + 1);
302 vecExponentValues.resize(iClassAmount + 1);
303 double originalValue(0.0),
304 limitDisplayValue(0.0),
305 doubleExponentValue(0.0);
306 int limitExponentValue(0);
307 for (
int ir = 0; ir <= iClassAmount; ++ir)
309 originalValue = matClassLimitData(ir);
310 if (originalValue == 0.0)
312 doubleExponentValue = 0.0;
317 doubleExponentValue = log10(std::fabs(originalValue));
320 limitExponentValue = round(doubleExponentValue);
321 limitDisplayValue = originalValue * (pow(10,-(limitExponentValue)));
322 vecCoefficientResults(ir) = limitDisplayValue;
323 vecExponentValues(ir) = limitExponentValue;
326 int lowestExponentValue{0},
327 highestExponentValue{0};
329 for (
int ir = 0; ir <= iClassAmount; ++ir)
331 if (vecExponentValues(ir) < lowestExponentValue)
333 lowestExponentValue = vecExponentValues(ir);
335 if (vecExponentValues(ir) > highestExponentValue)
337 highestExponentValue = vecExponentValues(ir);
341 if (highestExponentValue > 0)
343 for (
int ir = 0; ir <= iClassAmount; ++ir)
345 while (vecExponentValues(ir) < highestExponentValue)
347 vecCoefficientResults(ir) = vecCoefficientResults(ir) / 10;
348 vecExponentValues(ir)++;
353 if (lowestExponentValue < 0)
355 for (
int ir = 0; ir <= iClassAmount; ++ir)
357 while (vecExponentValues(ir) > lowestExponentValue)
359 vecCoefficientResults(ir) = vecCoefficientResults(ir) * 10;
360 vecExponentValues(ir)--;
QList< QVector3D > m_pReturnList
QtCharts::QChart * m_pChart
Eigen::VectorXi m_vecResultExponentValues
QtCharts::QSplineSeries * m_pSeries
QtCharts::QLineSeries * m_pRightThreshold
QVector3D m_vecReturnVector
Spline class for histogram display using Qtcharts/QSpline.
QtCharts::QLineSeries * m_pLeftThreshold
QSharedPointer< const Spline > ConstSPtr
QSharedPointer< Spline > SPtr
QtCharts::QLineSeries * m_pMiddleThreshold
#define DISPSHARED_EXPORT