Series.graphAutoscale + Series.graphZero
This commit is contained in:
parent
13c4652244
commit
1f6e90aa68
@ -37,6 +37,12 @@ public class Series {
|
|||||||
@Enumerated(EnumType.STRING)
|
@Enumerated(EnumType.STRING)
|
||||||
private SeriesType type;
|
private SeriesType type;
|
||||||
|
|
||||||
|
@Column(nullable = false)
|
||||||
|
private boolean graphZero = false;
|
||||||
|
|
||||||
|
@Column(nullable = false)
|
||||||
|
private boolean graphAutoscale = false;
|
||||||
|
|
||||||
public Series(@NonNull final String name, @NonNull final Unit unit, @NonNull final SeriesType type) {
|
public Series(@NonNull final String name, @NonNull final Unit unit, @NonNull final SeriesType type) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.title = name;
|
this.title = name;
|
||||||
|
|||||||
@ -20,6 +20,10 @@ public class SeriesDto {
|
|||||||
|
|
||||||
public final SeriesType type;
|
public final SeriesType type;
|
||||||
|
|
||||||
|
private final boolean graphZero;
|
||||||
|
|
||||||
|
private final boolean graphAutoscale;
|
||||||
|
|
||||||
public SeriesDto(@NonNull final Series series) {
|
public SeriesDto(@NonNull final Series series) {
|
||||||
this.id = series.getId();
|
this.id = series.getId();
|
||||||
this.name = series.getName();
|
this.name = series.getName();
|
||||||
@ -27,6 +31,8 @@ public class SeriesDto {
|
|||||||
this.unit = series.getUnit();
|
this.unit = series.getUnit();
|
||||||
this.decimals = series.getDecimals();
|
this.decimals = series.getDecimals();
|
||||||
this.type = series.getType();
|
this.type = series.getType();
|
||||||
|
this.graphZero = series.isGraphZero();
|
||||||
|
this.graphAutoscale = series.isGraphAutoscale();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String format(@Nullable final Double value) {
|
public String format(@Nullable final Double value) {
|
||||||
|
|||||||
@ -72,8 +72,8 @@ public class Graph {
|
|||||||
|
|
||||||
// find bounds
|
// find bounds
|
||||||
double vSum = 0;
|
double vSum = 0;
|
||||||
double vMin = Double.MAX_VALUE;
|
double vMin = series.isGraphZero() ? 0.0 : Double.MAX_VALUE;
|
||||||
double vMax = Double.MIN_VALUE;
|
double vMax = series.isGraphZero() ? 0.0 : Double.MIN_VALUE;
|
||||||
for (final GraphPoint point : points) {
|
for (final GraphPoint point : points) {
|
||||||
vMin = Math.min(vMin, point.getValue());
|
vMin = Math.min(vMin, point.getValue());
|
||||||
vMax = max(vMax, point.getValue());
|
vMax = max(vMax, point.getValue());
|
||||||
@ -81,7 +81,7 @@ public class Graph {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// auto scale
|
// auto scale
|
||||||
autoscale = new Autoscale(series.unit, vMin, vMax);
|
autoscale = new Autoscale(series, vMin, vMax);
|
||||||
vMin *= autoscale.factor;
|
vMin *= autoscale.factor;
|
||||||
vMax *= autoscale.factor;
|
vMax *= autoscale.factor;
|
||||||
vSum *= autoscale.factor;
|
vSum *= autoscale.factor;
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package de.ph87.data.value;
|
package de.ph87.data.value;
|
||||||
|
|
||||||
|
import de.ph87.data.series.*;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -14,14 +15,20 @@ public class Autoscale {
|
|||||||
@NonNull
|
@NonNull
|
||||||
public final String unit;
|
public final String unit;
|
||||||
|
|
||||||
public Autoscale(@NonNull final Unit sourceUnit, final double... values) {
|
public Autoscale(@NonNull final SeriesDto series, final double... values) {
|
||||||
final double abs = sourceUnit.factor * Arrays.stream(values).map(Math::abs).max().orElse(0);
|
if (!series.isGraphAutoscale()) {
|
||||||
|
this.factor = 1;
|
||||||
|
this.unit = series.unit.unit;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final double abs = series.unit.factor * Arrays.stream(values).map(Math::abs).max().orElse(0);
|
||||||
final double exp = Math.max(0, Math.log10(abs));
|
final double exp = Math.max(0, Math.log10(abs));
|
||||||
final int group = (int) Math.floor(exp / 3);
|
final int group = (int) Math.floor(exp / 3);
|
||||||
this.factor = sourceUnit.factor * Math.pow(10, -group * 3);
|
this.factor = series.unit.factor * Math.pow(10, -group * 3);
|
||||||
|
|
||||||
final int index = (SI_PREFIX.length - 1) / 2 + group;
|
final int index = (SI_PREFIX.length - 1) / 2 + group;
|
||||||
this.unit = SI_PREFIX[index] + sourceUnit.base.unit;
|
this.unit = SI_PREFIX[index] + series.unit.base.unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user