mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
ScatterDraw: Improved Null data handling
git-svn-id: svn://ultimatepp.org/upp/trunk@8829 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
870183059b
commit
75a5a4ec4e
3 changed files with 84 additions and 6 deletions
|
|
@ -11,6 +11,8 @@ double DataSource::Min(Getdatafun getdata) {
|
|||
if (!IsNull(d) && minVal > d)
|
||||
minVal = d;
|
||||
}
|
||||
if (minVal == -DOUBLE_NULL)
|
||||
return Null;
|
||||
return minVal;
|
||||
}
|
||||
|
||||
|
|
@ -21,25 +23,44 @@ double DataSource::Max(Getdatafun getdata) {
|
|||
if (!IsNull(d) && maxVal < d)
|
||||
maxVal = d;
|
||||
}
|
||||
if (maxVal == DOUBLE_NULL)
|
||||
return Null;
|
||||
return maxVal;
|
||||
}
|
||||
|
||||
double DataSource::Avg(Getdatafun getdata) {
|
||||
double ret = 0;
|
||||
for (int64 i = 0; i < GetCount(); ++i)
|
||||
ret += Membercall(getdata)(i);
|
||||
return ret/GetCount();
|
||||
int count = 0;
|
||||
for (int64 i = 0; i < GetCount(); ++i) {
|
||||
double d = Membercall(getdata)(i);
|
||||
if (!IsNull(d)) {
|
||||
ret += d;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if (count == 0)
|
||||
return Null;
|
||||
return ret/count;
|
||||
}
|
||||
|
||||
double DataSource::Variance(Getdatafun getdata, double avg) {
|
||||
if (IsNull(avg))
|
||||
avg = Avg(getdata);
|
||||
if (IsNull(avg))
|
||||
return Null;
|
||||
double ret = 0;
|
||||
int count = 0;
|
||||
for (int64 i = 0; i < GetCount(); ++i) {
|
||||
double val = Membercall(getdata)(i) - avg;
|
||||
ret += val*val;
|
||||
double d = Membercall(getdata)(i);
|
||||
if (!IsNull(d)) {
|
||||
d -= avg;
|
||||
ret += d*d;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return ret/(GetCount() - 1);
|
||||
if (count <= 0)
|
||||
return Null;
|
||||
return ret/(count - 1);
|
||||
}
|
||||
|
||||
double DataSource::StdDev(Getdatafun getdata, double avg) {
|
||||
|
|
|
|||
|
|
@ -378,7 +378,59 @@ void ScatterDraw::FitToData(bool vertical, double factor) {
|
|||
linkedCtrls[i]->DoFitToData(vertical);
|
||||
}
|
||||
}
|
||||
|
||||
double ScatterDraw::GetXMin() {
|
||||
double minx = -DOUBLE_NULL;
|
||||
//double maxx = DOUBLE_NULL;
|
||||
|
||||
for (int j = 0; j < series.GetCount(); j++) {
|
||||
if (series[j].opacity == 0 || series[j].PointsData()->IsExplicit())
|
||||
continue;
|
||||
minx = min(minx, series[j].PointsData()->MinX());
|
||||
//maxx = max(maxx, series[j].PointsData()->MaxX());
|
||||
}
|
||||
return minx;
|
||||
}
|
||||
|
||||
double ScatterDraw::GetXMax() {
|
||||
//double minx = -DOUBLE_NULL;
|
||||
double maxx = DOUBLE_NULL;
|
||||
|
||||
for (int j = 0; j < series.GetCount(); j++) {
|
||||
if (series[j].opacity == 0 || series[j].PointsData()->IsExplicit())
|
||||
continue;
|
||||
//minx = min(minx, series[j].PointsData()->MinX());
|
||||
maxx = max(maxx, series[j].PointsData()->MaxX());
|
||||
}
|
||||
return maxx;
|
||||
}
|
||||
|
||||
double ScatterDraw::GetYMin() {
|
||||
double miny = -DOUBLE_NULL;
|
||||
//double maxy = DOUBLE_NULL;
|
||||
|
||||
for (int j = 0; j < series.GetCount(); j++) {
|
||||
if (series[j].opacity == 0 || series[j].PointsData()->IsExplicit())
|
||||
continue;
|
||||
miny = min(miny, series[j].PointsData()->MinY());
|
||||
//maxy = max(maxy, series[j].PointsData()->MaxY());
|
||||
}
|
||||
return miny;
|
||||
}
|
||||
|
||||
double ScatterDraw::GetYMax() {
|
||||
//double miny = -DOUBLE_NULL;
|
||||
double maxy = DOUBLE_NULL;
|
||||
|
||||
for (int j = 0; j < series.GetCount(); j++) {
|
||||
if (series[j].opacity == 0 || series[j].PointsData()->IsExplicit())
|
||||
continue;
|
||||
//miny = min(miny, series[j].PointsData()->MinY());
|
||||
maxy = max(maxy, series[j].PointsData()->MaxY());
|
||||
}
|
||||
return maxy;
|
||||
}
|
||||
|
||||
void ScatterDraw::DoFitToData(bool vertical, double factor) {
|
||||
double minx, maxx, miny, miny2, maxy, maxy2;
|
||||
minx = miny = miny2 = -DOUBLE_NULL;
|
||||
|
|
|
|||
|
|
@ -166,6 +166,11 @@ public:
|
|||
ScatterDraw& SetMode(int _mode = MD_ANTIALIASED) {mode = _mode; Refresh(); return *this;};
|
||||
int GetMode() {return mode;};
|
||||
|
||||
double GetXMax();
|
||||
double GetXMin();
|
||||
double GetYMax();
|
||||
double GetYMin();
|
||||
|
||||
void FitToData(bool Y = false, double factor = 0);
|
||||
void Zoom(double scale, bool hor = true, bool ver = true);
|
||||
void Scroll(double factorX, double factorY);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue