mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-17 22:11:35 +02:00
added linear regression line for trend analysis, see issue #436
This commit is contained in:
@@ -139,6 +139,7 @@ public class ChartMeasurementView extends LineChart {
|
||||
isAnimationOn = true;
|
||||
isInGraphKey = true;
|
||||
|
||||
setHardwareAccelerationEnabled(true);
|
||||
setMarker(new ChartMarkerView(getContext(), R.layout.chart_markerview));
|
||||
setDoubleTapToZoomEnabled(false);
|
||||
setHighlightPerTapEnabled(true);
|
||||
@@ -512,10 +513,6 @@ public class ChartMeasurementView extends LineChart {
|
||||
entry.setData(extraData);
|
||||
|
||||
lineEntries.add(entry);
|
||||
|
||||
/*if (prefs.getBoolean("regressionLine", false) && measurementView instanceof WeightMeasurementView) {
|
||||
polyFitter.addPoint((double)entry.getX(), (double)entry.getY());
|
||||
}*/
|
||||
}
|
||||
|
||||
addMeasurementLine(lineDataSets, lineEntries, measurementView);
|
||||
@@ -523,7 +520,10 @@ public class ChartMeasurementView extends LineChart {
|
||||
}
|
||||
|
||||
addGoalLine(lineDataSets);
|
||||
// addRegressionLine(lineDataSets); TODO replaced it with an sliding average
|
||||
|
||||
if (isInGraphKey) {
|
||||
addRegressionLine(lineDataSets);
|
||||
}
|
||||
|
||||
LineData data = new LineData(lineDataSets);
|
||||
setData(data);
|
||||
@@ -607,7 +607,6 @@ public class ChartMeasurementView extends LineChart {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO replace with sliding average
|
||||
private void addRegressionLine(List<ILineDataSet> lineDataSets) {
|
||||
if (prefs.getBoolean("regressionLine", false)) {
|
||||
int regressLineOrder = 1;
|
||||
@@ -619,8 +618,16 @@ public class ChartMeasurementView extends LineChart {
|
||||
prefs.edit().putString("regressionLineOrder", "1").apply();
|
||||
}
|
||||
|
||||
List<ILineDataSet> regressionLineDataSets = new ArrayList<>();
|
||||
|
||||
for (ILineDataSet dataSet : lineDataSets) {
|
||||
PolynomialFitter polyFitter = new PolynomialFitter(Math.min(regressLineOrder, 100));
|
||||
|
||||
for (int i=0; i<dataSet.getEntryCount(); i++) {
|
||||
Entry entry = dataSet.getEntryForIndex(i);
|
||||
polyFitter.addPoint((double) entry.getX(), (double) entry.getY());
|
||||
}
|
||||
|
||||
PolynomialFitter.Polynomial polynomial = polyFitter.getBestFit();
|
||||
|
||||
List<Entry> valuesLinearRegression = new Stack<>();
|
||||
@@ -630,16 +637,21 @@ public class ChartMeasurementView extends LineChart {
|
||||
valuesLinearRegression.add(new Entry((float) i, (float) y_value));
|
||||
}
|
||||
|
||||
LineDataSet linearRegressionLine = new LineDataSet(valuesLinearRegression, getContext().getString(R.string.label_regression_line));
|
||||
LineDataSet linearRegressionLine = new LineDataSet(valuesLinearRegression, dataSet.getLabel() + "-" + getContext().getString(R.string.label_regression_line));
|
||||
linearRegressionLine.setLineWidth(1.5f);
|
||||
linearRegressionLine.setColor(ColorUtil.COLOR_VIOLET);
|
||||
linearRegressionLine.setAxisDependency(prefs.getBoolean("weightOnRightAxis", true) ? YAxis.AxisDependency.RIGHT : YAxis.AxisDependency.LEFT);
|
||||
linearRegressionLine.setColor(dataSet.getColor());
|
||||
linearRegressionLine.setAxisDependency(dataSet.getAxisDependency());
|
||||
linearRegressionLine.setDrawValues(false);
|
||||
linearRegressionLine.setDrawCircles(false);
|
||||
linearRegressionLine.setHighlightEnabled(false);
|
||||
linearRegressionLine.enableDashedLine(10, 30, 0);
|
||||
|
||||
lineDataSets.add(linearRegressionLine);
|
||||
regressionLineDataSets.add(linearRegressionLine);
|
||||
}
|
||||
|
||||
for (ILineDataSet dataSet : regressionLineDataSets) {
|
||||
lineDataSets.add(dataSet);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -110,7 +110,7 @@
|
||||
<string name="error_initial_weight_required">Fehler: Anfangsgewicht ist erforderlich</string>
|
||||
<string name="label_bt_device_no_support">Gerät wird nicht unterstützt</string>
|
||||
<string name="label_goal_line">Ziellinie</string>
|
||||
<string name="label_regression_line">Gewichtsregressionsgerade</string>
|
||||
<string name="label_regression_line">Regressionsgerade</string>
|
||||
<string name="label_regression_line_degree">Polynomischer Regressions-Grad</string>
|
||||
<string name="label_bluetooth_searching">Suche nach Ihrer Bluetooth Waagen</string>
|
||||
<string name="label_bone">Knochenmasse</string>
|
||||
|
@@ -136,7 +136,7 @@
|
||||
<string name="label_not_found">not found</string>
|
||||
<string name="label_ignoreOutOfRange">Ignore out of range data</string>
|
||||
<string name="label_initial_weight">Initial weight</string>
|
||||
<string name="label_regression_line">Regression weight line</string>
|
||||
<string name="label_regression_line">Regression line</string>
|
||||
<string name="label_regression_line_degree">Regression polynomial degree</string>
|
||||
<string name="label_goal_line">Goal line</string>
|
||||
<string name="label_help">Help</string>
|
||||
|
@@ -24,7 +24,6 @@
|
||||
android:summaryOff="@string/info_is_not_visible"
|
||||
android:summaryOn="@string/info_is_visible"
|
||||
android:title="@string/label_goal_line" />
|
||||
<!--
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="regressionLine"
|
||||
@@ -36,5 +35,4 @@
|
||||
android:dependency="regressionLine"
|
||||
android:key="regressionLineOrder"
|
||||
android:title="@string/label_regression_line_degree" />
|
||||
-->
|
||||
</PreferenceScreen>
|
||||
|
Reference in New Issue
Block a user