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.
This commit is contained in:
2019-11-30 08:44:29 +01:00
parent 9451feb268
commit 4e1b7a46d8

View File

@@ -11,13 +11,15 @@ import org.lucares.pdb.plot.api.AxisScale;
import org.lucares.recommind.logs.AxisSettings.Type; import org.lucares.recommind.logs.AxisSettings.Type;
public class AxisTime { public class AxisTime {
public static AxisSettings createXAxis(GnuplotSettings settings) { public static AxisSettings createXAxis(final GnuplotSettings settings) {
AxisSettings result = new AxisSettings(); final AxisSettings result = new AxisSettings();
final OffsetDateTime minDate = settings.getDateTimeRange().getStart(); final OffsetDateTime minDate = settings.getDateTimeRange().getStart();
final OffsetDateTime maxDate = settings.getDateTimeRange().getEnd(); final OffsetDateTime maxDate = settings.getDateTimeRange().getEnd();
final String formatX; 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"; formatX = "%Y-%m-%d";
} else if (minDate.until(maxDate, ChronoUnit.SECONDS) > 30) { } else if (minDate.until(maxDate, ChronoUnit.SECONDS) > 30) {
formatX = "%Y-%m-%d\\n%H:%M:%S"; formatX = "%Y-%m-%d\\n%H:%M:%S";
@@ -37,8 +39,8 @@ public class AxisTime {
return result; return result;
} }
public static AxisSettings createYAxis(GnuplotSettings settings, Collection<DataSeries> dataSeries) { public static AxisSettings createYAxis(final GnuplotSettings settings, final Collection<DataSeries> dataSeries) {
AxisSettings result = new AxisSettings(); final AxisSettings result = new AxisSettings();
result.setLabel("Duration"); result.setLabel("Duration");
result.setType(Type.Duration); result.setType(Type.Duration);
result.setAxis(GnuplotAxis.Y1); result.setAxis(GnuplotAxis.Y1);
@@ -61,12 +63,12 @@ public class AxisTime {
return result; 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 startEpochMilli = dateTimeRange.getStartEpochMilli();
final long endEpochMilli = dateTimeRange.getEndEpochMilli(); final long endEpochMilli = dateTimeRange.getEndEpochMilli();
final long rangeInMs = endEpochMilli - startEpochMilli + 1; 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)); final long maxLabels = Math.max(1, widthInPx / (GnuplotSettings.TICKS_FONT_SIZE * 8));
@@ -74,19 +76,25 @@ public class AxisTime {
return tickIncrement / 1000.0; return tickIncrement / 1000.0;
} }
private static long roundToTickIncrement(long milliseconds) { private static long roundToTickIncrement(final long milliseconds) {
LongList increments = LongList.of(100, 200, 500, TimeUnit.SECONDS.toMillis(1), TimeUnit.SECONDS.toMillis(2), final LongList increments = LongList.of(100, 200, 500, TimeUnit.SECONDS.toMillis(1),
TimeUnit.SECONDS.toMillis(5), TimeUnit.SECONDS.toMillis(10), TimeUnit.SECONDS.toMillis(15), TimeUnit.SECONDS.toMillis(2), TimeUnit.SECONDS.toMillis(5), TimeUnit.SECONDS.toMillis(10),
TimeUnit.SECONDS.toMillis(30), TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(2), TimeUnit.SECONDS.toMillis(15), TimeUnit.SECONDS.toMillis(30), TimeUnit.MINUTES.toMillis(1),
TimeUnit.MINUTES.toMillis(5), TimeUnit.MINUTES.toMillis(10), TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(2), TimeUnit.MINUTES.toMillis(5), TimeUnit.MINUTES.toMillis(10),
TimeUnit.MINUTES.toMillis(30), TimeUnit.HOURS.toMillis(1), TimeUnit.HOURS.toMillis(2), TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(30), TimeUnit.HOURS.toMillis(1),
TimeUnit.HOURS.toMillis(3), TimeUnit.HOURS.toMillis(6), TimeUnit.HOURS.toMillis(12), TimeUnit.HOURS.toMillis(2), TimeUnit.HOURS.toMillis(3), TimeUnit.HOURS.toMillis(6),
TimeUnit.HOURS.toMillis(18), TimeUnit.DAYS.toMillis(1), TimeUnit.DAYS.toMillis(2), TimeUnit.HOURS.toMillis(12), TimeUnit.HOURS.toMillis(18), TimeUnit.DAYS.toMillis(1),
TimeUnit.DAYS.toMillis(3), TimeUnit.DAYS.toMillis(4), TimeUnit.DAYS.toMillis(5), TimeUnit.DAYS.toMillis(2), TimeUnit.DAYS.toMillis(3), TimeUnit.DAYS.toMillis(4),
TimeUnit.DAYS.toMillis(6), TimeUnit.DAYS.toMillis(7), TimeUnit.DAYS.toMillis(14), TimeUnit.DAYS.toMillis(5), TimeUnit.DAYS.toMillis(6), TimeUnit.DAYS.toMillis(7),
TimeUnit.DAYS.toMillis(30), TimeUnit.DAYS.toMillis(90), TimeUnit.DAYS.toMillis(180), TimeUnit.DAYS.toMillis(14), TimeUnit.DAYS.toMillis(30), TimeUnit.DAYS.toMillis(90),
TimeUnit.DAYS.toMillis(365), TimeUnit.DAYS.toMillis(365 * 2), TimeUnit.DAYS.toMillis(365 * 5), TimeUnit.DAYS.toMillis(180), TimeUnit.DAYS.toMillis(365), TimeUnit.DAYS.toMillis(365 * 2),
TimeUnit.DAYS.toMillis(365 * 10), TimeUnit.DAYS.toMillis(365 * 20)); 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++) { for (int i = 0; i < increments.size(); i++) {
if (increments.get(i) > milliseconds) { if (increments.get(i) > milliseconds) {