use y1/y2 axis definitions

This commit is contained in:
2020-02-09 20:14:13 +01:00
parent 859491e99e
commit 57d016245c
20 changed files with 178 additions and 104 deletions

View File

@@ -9,10 +9,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
public class AxisSettings {
public enum Type {
Number, Time, Duration, Percent, HistogramBin, HistogramCount, Group
}
private String format = "";
private String label = "";

View File

@@ -9,7 +9,6 @@ import org.lucares.collections.LongList;
import org.lucares.pdb.api.DateTimeRange;
import org.lucares.pdb.plot.api.AxisScale;
import org.lucares.pdb.plot.api.YAxisDefinition;
import org.lucares.recommind.logs.AxisSettings.Type;
public class AxisTime {
public static AxisSettings createXAxis(final GnuplotSettings settings) {
@@ -40,22 +39,21 @@ public class AxisTime {
return result;
}
public static AxisSettings createYAxis(final GnuplotSettings settings, final Collection<DataSeries> dataSeries) {
final GnuplotAxis yAxis = GnuplotAxis.Y1; // TODO get yAxis as parameter
final AxisSettings result = new AxisSettings();
result.setLabel("Duration");
result.setType(Type.Duration);
result.setAxis(yAxis);
result.setTicsEnabled(true);
public static AxisSettings createYAxis(final GnuplotSettings settings, final GnuplotAxis yAxis,
final Collection<DataSeries> dataSeries) {
final YAxisDefinition yAxisDefinition = settings.getYAxisDefinition(yAxis);
final AxisSettings result = new AxisSettings();
result.setLabel(yAxisDefinition.getRangeUnit().getLabel());
result.setType(yAxisDefinition.getRangeUnit().getType());
result.setAxis(yAxis);
result.setTicsEnabled(true);
final int graphOffset = yAxisDefinition.getAxisScale() == AxisScale.LINEAR ? 0 : 1;
if (yAxisDefinition.hasRange()) {
final long min = Math.max(yAxisDefinition.getRangeMinInMs(), graphOffset);
final long max = yAxisDefinition.getRangeMaxInMs();
final long min = Math.max(yAxisDefinition.getRangeMinForUnit(), graphOffset);
final long max = yAxisDefinition.getRangeMaxForUnit();
result.setFrom(String.valueOf(min));
result.setTo(String.valueOf(max));
} else {

View File

@@ -203,7 +203,7 @@ public class Plotter {
}
static String title(final Tags tags, final CsvSummary csvSummary) {
// FIXME title must be computed by the AggregateHandler, because it is the only
// TODO title must be computed by the AggregateHandler, because it is the only
// one knowing how many values are plotted
final StringBuilder result = new StringBuilder(tags.asValueString());

View File

@@ -0,0 +1,5 @@
package org.lucares.recommind.logs;
public enum Type {
Number, Time, Duration, Percent, HistogramBin, HistogramCount, Group
}

View File

@@ -25,28 +25,31 @@ class YAxisTicks {
final long yRangeMax;
final long yRangeMin;
if (yAxisDefinition.hasRange()) {
yRangeMin = yAxisDefinition.getRangeMinInMs();
yRangeMax = yAxisDefinition.getRangeMaxInMs();
yRangeMin = yAxisDefinition.getRangeMinForUnit();
yRangeMax = yAxisDefinition.getRangeMaxForUnit();
} else {
yRangeMin = 0;
yRangeMax = DataSeries.maxValue(dataSeries);
}
final int height = settings.getHeight();
switch (yAxisDefinition.getAxisScale()) {
case LINEAR:
result = computeLinearYTicks(height, yRangeMin, yRangeMax);
break;
case LOG10:
result = computeLog10YTicks(height, yRangeMin, yRangeMax);
break;
default:
// use the default
if (yAxisDefinition.getRangeUnit().isTime()) {
switch (yAxisDefinition.getAxisScale()) {
case LINEAR:
result = computeLinearYTicksTime(height, yRangeMin, yRangeMax);
break;
case LOG10:
result = computeLog10YTicksTime(height, yRangeMin, yRangeMax);
break;
default:
throw new IllegalStateException("unhandled value: " + yAxisDefinition.getRangeUnit());
}
}
return result;
}
private static List<String> computeLog10YTicks(final int height, final long yRangeMin, final long yRangeMax) {
private static List<String> computeLog10YTicksTime(final int height, final long yRangeMin, final long yRangeMax) {
final List<String> ticsLabels = Arrays.asList(//
"\"1ms\" 1", //
@@ -86,7 +89,7 @@ class YAxisTicks {
return ticsLabels;
}
private static List<String> computeLinearYTicks(final long height, final long yRangeMinInMs,
private static List<String> computeLinearYTicksTime(final long height, final long yRangeMinInMs,
final long yRangeMaxInMs) {
final long plotHeight = height - GnuplotSettings.GNUPLOT_TOP_BOTTOM_MARGIN;