42 #include "../disp_global.h"
50 #include <QtCharts/QChart>
51 #include <QtCharts/QBarCategoryAxis>
52 #include <QtCharts/QBarSet>
53 #include <QtCharts/QBarSeries>
87 typedef QSharedPointer<Bar>
SPtr;
94 Bar(
const QString& title =
"", QWidget* parent = 0);
105 void setData(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& matClassLimitData,
106 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData,
107 int iPrecisionValue);
109 void setData(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& matClassLimitData,
110 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData,
111 int iPrecisionValue);
122 void updatePlot(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
123 const Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic>& matClassFrequencyData,
124 int iPrecisionValue);
136 void splitCoefficientAndExponent(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
138 Eigen::VectorXd& vecCoefficientResults,
139 Eigen::VectorXi& vecExponentValues);
144 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
145 QPointer<QtCharts::QChart> m_pChart;
146 QPointer<QtCharts::QBarCategoryAxis> m_pAxis;
148 QPointer<QChart> m_pChart;
149 QPointer<QBarCategoryAxis> m_pAxis;
159 void Bar::setData(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& matClassLimitData,
160 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData,
163 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(matClassLimitData.rows(),1);
164 matrixName.col(0) = matClassLimitData;
165 this->
updatePlot(matrixName, matClassFrequencyData, iPrecisionValue);
171 void Bar::setData(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& matClassLimitData,
172 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData,
175 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1, matClassLimitData.cols());
176 matrixName.row(0) = matClassLimitData;
177 this->
updatePlot(matrixName, matClassFrequencyData, iPrecisionValue);
183 void Bar::updatePlot(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
184 const Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic>& matClassFrequencyData,
187 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
188 using namespace QtCharts;
190 Eigen::VectorXd resultDisplayValues;
191 Eigen::VectorXi resultExponentValues;
192 int iClassAmount = matClassFrequencyData.rows();
196 QString histogramExponent;
197 histogramExponent =
"X-axis scale: 10e" + QString::number(resultExponentValues(0));
198 QBarSet* set =
new QBarSet(histogramExponent);
199 QStringList categories;
200 QString currentLimits;
203 for (
int kr = 0; kr < iClassAmount; ++kr)
205 classFreq = matClassFrequencyData(kr);
206 currentLimits = ((QString::number(resultDisplayValues(kr),
'g' ,iPrecisionValue) +
" to " + (QString::number(resultDisplayValues(kr+1),
'g', iPrecisionValue))));
207 categories << currentLimits;
213 QBarSeries *series =
new QBarSeries();
216 m_pChart->removeAllSeries();
217 m_pChart->addSeries(series);
220 m_pAxis->append(categories);
221 m_pChart->createDefaultAxes();
222 m_pChart->setAxisX(m_pAxis, series);
227 template <
typename T>
230 Eigen::VectorXd& vecCoefficientResults, Eigen::VectorXi& vecExponentValues)
232 vecCoefficientResults.resize(iClassAmount + 1);
233 vecExponentValues.resize(iClassAmount + 1);
234 double originalValue(0.0),
235 limitDisplayValue(0.0),
236 doubleExponentValue(0.0);
237 int limitExponentValue(0);
238 for (
int ir = 0; ir <= iClassAmount; ++ir)
240 originalValue = matClassLimitData(ir);
241 if (originalValue == 0.0)
243 doubleExponentValue = 0.0;
247 doubleExponentValue = log10(std::fabs(originalValue));
250 limitExponentValue = round(doubleExponentValue);
251 limitDisplayValue = originalValue * (pow(10,-(limitExponentValue)));
252 vecCoefficientResults(ir) = limitDisplayValue;
253 vecExponentValues(ir) = limitExponentValue;
256 int lowestExponentValue{0},
257 highestExponentValue{0};
259 for (
int ir = 0; ir <= iClassAmount; ++ir)
261 if (vecExponentValues(ir) < lowestExponentValue)
263 lowestExponentValue = vecExponentValues(ir);
265 if (vecExponentValues(ir) > highestExponentValue)
267 highestExponentValue = vecExponentValues(ir);
271 if (highestExponentValue > 0)
273 for (
int ir = 0; ir <= iClassAmount; ++ir)
275 while (vecExponentValues(ir) < highestExponentValue)
277 vecCoefficientResults(ir) = vecCoefficientResults(ir) / 10;
278 vecExponentValues(ir)++;
283 if (lowestExponentValue < 0)
285 for (
int ir = 0; ir <= iClassAmount; ++ir)
287 while (vecExponentValues(ir) > lowestExponentValue)
289 vecCoefficientResults(ir) = vecCoefficientResults(ir) * 10;
290 vecExponentValues(ir)--;