From 4e1b7a46d8e3ff47745f3c8e728a244178871f02 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sat, 30 Nov 2019 08:44:29 +0100 Subject: [PATCH] fix x-axis labels overlap when zooming out The x-axis labels overlapped when zooming out too far. Fixed by increasing the step size and reducint the labels to year only. --- .../org/lucares/recommind/logs/AxisTime.java | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/AxisTime.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/AxisTime.java index f5cb73b..2979b21 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/AxisTime.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/AxisTime.java @@ -11,13 +11,15 @@ import org.lucares.pdb.plot.api.AxisScale; import org.lucares.recommind.logs.AxisSettings.Type; public class AxisTime { - public static AxisSettings createXAxis(GnuplotSettings settings) { - AxisSettings result = new AxisSettings(); + public static AxisSettings createXAxis(final GnuplotSettings settings) { + final AxisSettings result = new AxisSettings(); final OffsetDateTime minDate = settings.getDateTimeRange().getStart(); final OffsetDateTime maxDate = settings.getDateTimeRange().getEnd(); final String formatX; - if (minDate.until(maxDate, ChronoUnit.WEEKS) > 1) { + if (minDate.until(maxDate, ChronoUnit.YEARS) > 1) { + formatX = "%Y"; + } else if (minDate.until(maxDate, ChronoUnit.WEEKS) > 1) { formatX = "%Y-%m-%d"; } else if (minDate.until(maxDate, ChronoUnit.SECONDS) > 30) { formatX = "%Y-%m-%d\\n%H:%M:%S"; @@ -37,8 +39,8 @@ public class AxisTime { return result; } - public static AxisSettings createYAxis(GnuplotSettings settings, Collection dataSeries) { - AxisSettings result = new AxisSettings(); + public static AxisSettings createYAxis(final GnuplotSettings settings, final Collection dataSeries) { + final AxisSettings result = new AxisSettings(); result.setLabel("Duration"); result.setType(Type.Duration); result.setAxis(GnuplotAxis.Y1); @@ -61,12 +63,12 @@ public class AxisTime { return result; } - public static double computeTimeTicIncrement(int width, DateTimeRange dateTimeRange) { + public static double computeTimeTicIncrement(final int width, final DateTimeRange dateTimeRange) { final long startEpochMilli = dateTimeRange.getStartEpochMilli(); final long endEpochMilli = dateTimeRange.getEndEpochMilli(); final long rangeInMs = endEpochMilli - startEpochMilli + 1; - int widthInPx = width - GnuplotSettings.GNUPLOT_LEFT_RIGHT_MARGIN; + final int widthInPx = width - GnuplotSettings.GNUPLOT_LEFT_RIGHT_MARGIN; final long maxLabels = Math.max(1, widthInPx / (GnuplotSettings.TICKS_FONT_SIZE * 8)); @@ -74,19 +76,25 @@ public class AxisTime { return tickIncrement / 1000.0; } - private static long roundToTickIncrement(long milliseconds) { - LongList increments = LongList.of(100, 200, 500, TimeUnit.SECONDS.toMillis(1), TimeUnit.SECONDS.toMillis(2), - TimeUnit.SECONDS.toMillis(5), TimeUnit.SECONDS.toMillis(10), TimeUnit.SECONDS.toMillis(15), - TimeUnit.SECONDS.toMillis(30), TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(2), - TimeUnit.MINUTES.toMillis(5), TimeUnit.MINUTES.toMillis(10), TimeUnit.MINUTES.toMillis(15), - TimeUnit.MINUTES.toMillis(30), TimeUnit.HOURS.toMillis(1), TimeUnit.HOURS.toMillis(2), - TimeUnit.HOURS.toMillis(3), TimeUnit.HOURS.toMillis(6), TimeUnit.HOURS.toMillis(12), - TimeUnit.HOURS.toMillis(18), TimeUnit.DAYS.toMillis(1), TimeUnit.DAYS.toMillis(2), - TimeUnit.DAYS.toMillis(3), TimeUnit.DAYS.toMillis(4), TimeUnit.DAYS.toMillis(5), - TimeUnit.DAYS.toMillis(6), TimeUnit.DAYS.toMillis(7), TimeUnit.DAYS.toMillis(14), - TimeUnit.DAYS.toMillis(30), TimeUnit.DAYS.toMillis(90), TimeUnit.DAYS.toMillis(180), - TimeUnit.DAYS.toMillis(365), TimeUnit.DAYS.toMillis(365 * 2), TimeUnit.DAYS.toMillis(365 * 5), - TimeUnit.DAYS.toMillis(365 * 10), TimeUnit.DAYS.toMillis(365 * 20)); + private static long roundToTickIncrement(final long milliseconds) { + final LongList increments = LongList.of(100, 200, 500, TimeUnit.SECONDS.toMillis(1), + TimeUnit.SECONDS.toMillis(2), TimeUnit.SECONDS.toMillis(5), TimeUnit.SECONDS.toMillis(10), + TimeUnit.SECONDS.toMillis(15), TimeUnit.SECONDS.toMillis(30), TimeUnit.MINUTES.toMillis(1), + TimeUnit.MINUTES.toMillis(2), TimeUnit.MINUTES.toMillis(5), TimeUnit.MINUTES.toMillis(10), + TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(30), TimeUnit.HOURS.toMillis(1), + TimeUnit.HOURS.toMillis(2), TimeUnit.HOURS.toMillis(3), TimeUnit.HOURS.toMillis(6), + TimeUnit.HOURS.toMillis(12), TimeUnit.HOURS.toMillis(18), TimeUnit.DAYS.toMillis(1), + TimeUnit.DAYS.toMillis(2), TimeUnit.DAYS.toMillis(3), TimeUnit.DAYS.toMillis(4), + TimeUnit.DAYS.toMillis(5), TimeUnit.DAYS.toMillis(6), TimeUnit.DAYS.toMillis(7), + TimeUnit.DAYS.toMillis(14), TimeUnit.DAYS.toMillis(30), TimeUnit.DAYS.toMillis(90), + TimeUnit.DAYS.toMillis(180), TimeUnit.DAYS.toMillis(365), TimeUnit.DAYS.toMillis(365 * 2), + TimeUnit.DAYS.toMillis(365 * 5), TimeUnit.DAYS.toMillis(365 * 10), TimeUnit.DAYS.toMillis(365 * 20), + TimeUnit.DAYS.toMillis(365 * 50), TimeUnit.DAYS.toMillis(365 * 100), TimeUnit.DAYS.toMillis(365 * 500), + TimeUnit.DAYS.toMillis(365 * 1000), TimeUnit.DAYS.toMillis(365 * 2000), + TimeUnit.DAYS.toMillis(365 * 5000), TimeUnit.DAYS.toMillis(365 * 10000), + TimeUnit.DAYS.toMillis(365 * 20000), TimeUnit.DAYS.toMillis(365 * 50000), + TimeUnit.DAYS.toMillis(365 * 100000), TimeUnit.DAYS.toMillis(365 * 200000), + TimeUnit.DAYS.toMillis(365 * 500000)); for (int i = 0; i < increments.size(); i++) { if (increments.get(i) > milliseconds) {