From 786570503aab1ffbab5e4c4ac390ed421a761a5e Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Fri, 10 Aug 2018 09:27:19 +0200 Subject: [PATCH] make plot for parallel requests easier to digest 1. draw it below the scatter plot, so that you can see both 2. make the color lighter, so that you can see both --- .../pdb/plot/api/AggregateHandler.java | 4 ++- .../lucares/pdb/plot/api/NullAggregate.java | 7 +++- .../plot/api/ParallelRequestsAggregate.java | 10 ++++-- .../pdb/plot/api/PercentileAggregate.java | 8 ++++- .../org/lucares/recommind/logs/DashTypes.java | 31 ++++++++++-------- .../lucares/recommind/logs/DataSeries.java | 18 ++++------- .../recommind/logs/FileBackedDataSeries.java | 6 ++-- .../recommind/logs/GnuplotFileGenerator.java | 3 +- .../org/lucares/recommind/logs/LineStyle.java | 32 +++++++++++++++++++ 9 files changed, 84 insertions(+), 35 deletions(-) create mode 100644 pdb-plotting/src/main/java/org/lucares/recommind/logs/LineStyle.java diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java index c15c3ef..b999c35 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java @@ -19,7 +19,9 @@ public interface AggregateHandler { builder.append(String.format(format + "\n", args)); } - void addPlots(StringBuilder result, Collection dataSeries); + void addPlotsBeforeScatter(StringBuilder result, Collection dataSeries); + + void addPlotsAfterScatter(StringBuilder result, Collection dataSeries); CustomAggregator createCustomAggregator(Path tmpDir, long fromEpochMilli, long toEpochMilli); diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullAggregate.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullAggregate.java index 4957a35..34db45c 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullAggregate.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/NullAggregate.java @@ -14,7 +14,12 @@ public class NullAggregate implements AggregateHandler { } @Override - public void addPlots(final StringBuilder result, final Collection dataSeries) { + public void addPlotsBeforeScatter(final StringBuilder result, final Collection dataSeries) { + // nothing to do; this is a Null-Object + } + + @Override + public void addPlotsAfterScatter(final StringBuilder result, final Collection dataSeries) { // nothing to do; this is a Null-Object } diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/ParallelRequestsAggregate.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/ParallelRequestsAggregate.java index 8adbf44..f6d642b 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/ParallelRequestsAggregate.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/ParallelRequestsAggregate.java @@ -15,18 +15,24 @@ public class ParallelRequestsAggregate implements AggregateHandler { } @Override - public void addPlots(final StringBuilder result, final Collection dataSeries) { + public void addPlotsBeforeScatter(final StringBuilder result, final Collection dataSeries) { for (final DataSeries dataSerie : dataSeries) { final AggregatedData aggregatedData = dataSerie.getAggregatedData(); if (aggregatedData != null) { appendfln(result, "'%s' using 1:2 notitle with filledcurve axes x1y2 lw 1 %s, \\", // aggregatedData.getDataFile().getAbsolutePath(), // - dataSerie.getStyle()// + dataSerie.getStyle().brighter().asGnuplotLineStyle()// ); } } } + @Override + public void addPlotsAfterScatter(final StringBuilder result, final Collection dataSeries) { + // nothing to do: the parallel line plots shall be drawn below the scatter plot, + // so that you can see both. Therefore it must be drawn first. + } + @Override public CustomAggregator createCustomAggregator(final Path tmpDir, final long fromEpochMilli, final long toEpochMilli) { diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileAggregate.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileAggregate.java index 1768d6f..00d0f54 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileAggregate.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PercentileAggregate.java @@ -27,7 +27,13 @@ public class PercentileAggregate implements AggregateHandler { } @Override - public void addPlots(final StringBuilder result, final Collection dataSeries) { + public void addPlotsBeforeScatter(final StringBuilder result, final Collection dataSeries) { + // nothing to do: the percentile line should be drawn on the scatter plots and + // must therefore be rendered after the scatter + } + + @Override + public void addPlotsAfterScatter(final StringBuilder result, final Collection dataSeries) { for (final DataSeries dataSerie : dataSeries) { final AggregatedData aggregatedData = dataSerie.getAggregatedData(); if (aggregatedData != null) { diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/DashTypes.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/DashTypes.java index 2470c73..57d58db 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/DashTypes.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/DashTypes.java @@ -1,18 +1,21 @@ package org.lucares.recommind.logs; -import java.util.Arrays; -import java.util.List; +public enum DashTypes { -public class DashTypes { - public static final List DEFAULT = Arrays.asList("1", // - "2", // - "3", // - "4", // - "5", // - "6", // - "\".\"", // - "\"-\"", // - "\"._\"", // - "\"..- \""// - ); + DASH_TYPE_2("2"), DASH_TYPE_3("3"), DASH_TYPE_4("4"), DASH_TYPE_5("5"), DASH_TYPE_6("6"), DASH_TYPE_DOT( + "\".\""), DASH_TYPE_DASH("\"-\""), DASH_TYPE_DOT_DASH("\"._\""), DASH_TYPE_DOT_DOT_DASH("\"..- \""); + + private final String gnuplotDashType; + + private DashTypes(final String gnuplotDashType) { + this.gnuplotDashType = gnuplotDashType; + } + + public String toGnuplotDashType() { + return gnuplotDashType; + } + + static DashTypes get(final int i) { + return values()[i % values().length]; + } } diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java index 95b82e6..768436f 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java @@ -36,9 +36,9 @@ public interface DataSeries { public double getAverage(); - public void setStyle(String style); + public void setStyle(LineStyle style); - public String getStyle(); + public LineStyle getStyle(); public AggregatedData getAggregatedData(); @@ -97,18 +97,12 @@ public interface DataSeries { for (final DataSeries dataSerie : dataSeries) { final int numColors = GnuplotColorPalettes.DEFAULT.size(); - final int numDashTypes = DashTypes.DEFAULT.size(); final GnuplotColor color = GnuplotColorPalettes.DEFAULT.get(i % numColors); - if (dataSerie.getAggregatedData() != null) { - // color = color.brighter(); - } - final String dashType = DashTypes.DEFAULT.get((i / numColors) % numDashTypes); - final String style = String.format("lt %s dt %s ", // - color.getColor(), // - dashType// - ); - dataSerie.setStyle(style); + + final DashTypes dashType = DashTypes.get(i / numColors); + final LineStyle lineStyle = new LineStyle(color, dashType); + dataSerie.setStyle(lineStyle); i++; } } diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/FileBackedDataSeries.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/FileBackedDataSeries.java index a2a35fe..3ac3afb 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/FileBackedDataSeries.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/FileBackedDataSeries.java @@ -14,7 +14,7 @@ public class FileBackedDataSeries implements DataSeries { private final GnuplotLineType linetype; - private String style; + private LineStyle style; public FileBackedDataSeries(final int id, final String title, final CsvSummary csvSummary, final GnuplotLineType linetype) { @@ -35,12 +35,12 @@ public class FileBackedDataSeries implements DataSeries { } @Override - public void setStyle(final String style) { + public void setStyle(final LineStyle style) { this.style = style; } @Override - public String getStyle() { + public LineStyle getStyle() { return style; } diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java index b534d7f..ce91a8b 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java @@ -80,10 +80,11 @@ public class GnuplotFileGenerator { appendf(result, "plot "); + settings.getAggregate().addPlotsBeforeScatter(result, dataSeries); for (final DataSeries dataSerie : dataSeries) { appendfln(result, dataSerie.getGnuplotPlotDefinition()); } - settings.getAggregate().addPlots(result, dataSeries); + settings.getAggregate().addPlotsAfterScatter(result, dataSeries); return result.toString(); } diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/LineStyle.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/LineStyle.java new file mode 100644 index 0000000..796b5cf --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/LineStyle.java @@ -0,0 +1,32 @@ +package org.lucares.recommind.logs; + +public class LineStyle { + + private final GnuplotColor color; + private final DashTypes dashType; + + public LineStyle(final GnuplotColor color, final DashTypes dashType) { + this.color = color; + this.dashType = dashType; + } + + public String asGnuplotLineStyle() { + return String.format("lt %s dt %s ", // + color.getColor(), // + dashType.toGnuplotDashType()// + ); + } + + @Override + public String toString() { + return asGnuplotLineStyle(); + } + + public LineStyle brighter() { + return new LineStyle(color.brighter(), dashType); + } + + public LineStyle darker() { + return new LineStyle(color.darker(), dashType); + } +}