mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
statistics: add count to box and whisker plots
When calculating the quartiles, we need the count of dives anyway, which makes it trivial to export this value to the frontend. Fixes an erroneous "mean", which should be "median". Suggested-by: Peter Zaal <peter.zaal@gmail.com> Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
1808804bab
commit
bbdd34d069
3 changed files with 10 additions and 9 deletions
|
@ -119,11 +119,11 @@ std::vector<QString> BoxSeries::formatInformation(const Item &item) const
|
||||||
{
|
{
|
||||||
QLocale loc;
|
QLocale loc;
|
||||||
return {
|
return {
|
||||||
item.binName,
|
StatsTranslations::tr("%1 (%2 dives)").arg(item.binName, loc.toString(item.q.count)),
|
||||||
QStringLiteral("%1:").arg(variable),
|
QStringLiteral("%1:").arg(variable),
|
||||||
infoItem(StatsTranslations::tr("min"), unit, decimals, item.q.min),
|
infoItem(StatsTranslations::tr("min"), unit, decimals, item.q.min),
|
||||||
infoItem(StatsTranslations::tr("Q1"), unit, decimals, item.q.q1),
|
infoItem(StatsTranslations::tr("Q1"), unit, decimals, item.q.q1),
|
||||||
infoItem(StatsTranslations::tr("mean"), unit, decimals, item.q.q2),
|
infoItem(StatsTranslations::tr("median"), unit, decimals, item.q.q2),
|
||||||
infoItem(StatsTranslations::tr("Q3"), unit, decimals, item.q.q3),
|
infoItem(StatsTranslations::tr("Q3"), unit, decimals, item.q.q3),
|
||||||
infoItem(StatsTranslations::tr("max"), unit, decimals, item.q.max)
|
infoItem(StatsTranslations::tr("max"), unit, decimals, item.q.max)
|
||||||
};
|
};
|
||||||
|
|
|
@ -92,7 +92,7 @@ template<> QString invalid_value<QString>()
|
||||||
template<> StatsQuartiles invalid_value<StatsQuartiles>()
|
template<> StatsQuartiles invalid_value<StatsQuartiles>()
|
||||||
{
|
{
|
||||||
double NaN = std::numeric_limits<double>::quiet_NaN();
|
double NaN = std::numeric_limits<double>::quiet_NaN();
|
||||||
return { NaN, NaN, NaN, NaN, NaN };
|
return { NaN, NaN, NaN, NaN, NaN, 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_invalid_value(int i)
|
static bool is_invalid_value(int i)
|
||||||
|
@ -411,20 +411,20 @@ StatsQuartiles StatsVariable::quartiles(const std::vector<dive *> &dives) const
|
||||||
// This expects the value vector to be sorted!
|
// This expects the value vector to be sorted!
|
||||||
StatsQuartiles StatsVariable::quartiles(const std::vector<StatsValue> &vec)
|
StatsQuartiles StatsVariable::quartiles(const std::vector<StatsValue> &vec)
|
||||||
{
|
{
|
||||||
size_t s = vec.size();
|
int s = (int)vec.size();
|
||||||
if (s == 0)
|
if (s <= 0)
|
||||||
return invalid_value<StatsQuartiles>();
|
return invalid_value<StatsQuartiles>();
|
||||||
switch (s % 4) {
|
switch (s % 4) {
|
||||||
default:
|
default:
|
||||||
// gcc doesn't recognize that we catch all possible values. disappointing.
|
// gcc doesn't recognize that we catch all possible values. disappointing.
|
||||||
case 0:
|
case 0:
|
||||||
return { vec[0].v, q3(&vec[s/4 - 1]), q2(&vec[s/2 - 1]), q1(&vec[s - s/4 - 1]), vec[s - 1].v };
|
return { vec[0].v, q3(&vec[s/4 - 1]), q2(&vec[s/2 - 1]), q1(&vec[s - s/4 - 1]), vec[s - 1].v, s };
|
||||||
case 1:
|
case 1:
|
||||||
return { vec[0].v, vec[s/4].v, vec[s/2].v, vec[s - s/4 - 1].v, vec[s - 1].v };
|
return { vec[0].v, vec[s/4].v, vec[s/2].v, vec[s - s/4 - 1].v, vec[s - 1].v, s };
|
||||||
case 2:
|
case 2:
|
||||||
return { vec[0].v, q1(&vec[s/4]), q2(&vec[s/2 - 1]), q3(&vec[s - s/4 - 2]), vec[s - 1].v };
|
return { vec[0].v, q1(&vec[s/4]), q2(&vec[s/2 - 1]), q3(&vec[s - s/4 - 2]), vec[s - 1].v, s };
|
||||||
case 3:
|
case 3:
|
||||||
return { vec[0].v, q2(&vec[s/4]), vec[s/2].v, q2(&vec[s - s/4 - 2]), vec[s - 1].v };
|
return { vec[0].v, q2(&vec[s/4]), vec[s/2].v, q2(&vec[s - s/4 - 2]), vec[s - 1].v, s };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ struct StatsQuartiles {
|
||||||
double min;
|
double min;
|
||||||
double q1, q2, q3;
|
double q1, q2, q3;
|
||||||
double max;
|
double max;
|
||||||
|
int count;
|
||||||
bool isValid() const;
|
bool isValid() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue