From 0e3d2338df90d6ed44756a24a2588c1a546eecab Mon Sep 17 00:00:00 2001 From: Tim Molter <tim@knowm.org> Date: Mon, 25 Jan 2016 13:33:40 +0100 Subject: [PATCH] Issue #100 and #129 - allow excluding certain series from chart legend --- .../xchart/demo/charts/line/LineChart07.java | 3 ++- .../java/org/knowm/xchart/internal/Series.java | 18 ++++++++++++++---- .../xchart/internal/chartpart/Legend_.java | 6 +++++- .../internal/chartpart/Legend_AxesChart.java | 4 ++++ .../xchart/internal/chartpart/Legend_Pie.java | 4 ++++ 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart07.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart07.java index 827c4f32..79f67c21 100644 --- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart07.java +++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/line/LineChart07.java @@ -36,6 +36,7 @@ import org.knowm.xchart.internal.style.markers.SeriesMarkers; * <ul> * <li>A Line Chart created from multiple category series types * <li>GGPlot2 Theme + * <li>disabling some series shown in legend */ public class LineChart07 implements ExampleChart { @@ -97,7 +98,7 @@ public class LineChart07 implements ExampleChart { for (int i = 0; i < seriesNames.length; i++) { Series_Category series = chart.addSeries(seriesNames[i], xAxisKeys, Arrays.asList(dataPerSeries[i])); series.setMarker(SeriesMarkers.NONE); - // series.setChartCategorySeriesRenderStyle(ChartCategorySeriesRenderStyle.Line); + series.setShowInLegend(i % 2 == 0); } return chart; diff --git a/xchart/src/main/java/org/knowm/xchart/internal/Series.java b/xchart/src/main/java/org/knowm/xchart/internal/Series.java index ae4c6a81..128b3a59 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/Series.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/Series.java @@ -21,7 +21,7 @@ import java.awt.Color; import org.knowm.xchart.internal.chartpart.RenderableSeries.LegendRenderType; /** - * A Series containing X and Y data to be plotted on a Chart + * A Series containing data to be plotted on a Chart * * @author timmolter */ @@ -29,11 +29,12 @@ public abstract class Series { public abstract LegendRenderType getLegendRenderType(); - private String name = ""; + private final String name; - /** Fill Color */ private Color fillColor; + private boolean showInLegend; + /** * Constructor * @@ -46,7 +47,6 @@ public abstract class Series { throw new IllegalArgumentException("Series name cannot be null or zero-length!!!"); } this.name = name; - } public Color getFillColor() { @@ -64,4 +64,14 @@ public abstract class Series { return name; } + public boolean isShowInLegend() { + + return showInLegend; + } + + public void setShowInLegend(boolean showInLegend) { + + this.showInLegend = showInLegend; + } + } diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_.java index 71f7d58a..81acfa4c 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_.java @@ -72,7 +72,7 @@ public abstract class Legend_<ST extends Styler, S extends Series> implements Ch // We call get bounds hint because sometimes the Axis object needs it to know it's bounds (if Legend is outside Plot). If it's null, we just need to calulate it before painting, because the paint // methods needs the bounds. if (bounds == null) { // No other part asked for the bounds yet. Probably because it's an "inside" legend location - bounds = getBoundsHint(); // Actually, the only information contained in thsi bounds is the width and height. + bounds = getBoundsHint(); // Actually, the only information contained in this bounds is the width and height. } // legend draw position @@ -136,6 +136,10 @@ public abstract class Legend_<ST extends Styler, S extends Series> implements Ch Map<String, S> map = chart.getSeriesMap(); for (Series series : map.values()) { + if (series.isShowInLegend()) { + continue; + } + Map<String, Rectangle2D> seriesTextBounds = getSeriesTextBounds(series); double legendEntryHeight = 0; // could be multi-line diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_AxesChart.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_AxesChart.java index 39ce97fe..9f05f7b8 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_AxesChart.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_AxesChart.java @@ -69,6 +69,10 @@ public class Legend_AxesChart<ST extends Styler_AxesChart, S extends Series> ext Map<String, Series_AxesChart> map = chart.getSeriesMap(); for (Series_AxesChart series : map.values()) { + if (series.isShowInLegend()) { + continue; + } + Map<String, Rectangle2D> seriesTextBounds = getSeriesTextBounds(series); float legendEntryHeight = 0; diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_Pie.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_Pie.java index 6257b92d..4197d6a9 100644 --- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_Pie.java +++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend_Pie.java @@ -66,6 +66,10 @@ public class Legend_Pie<ST extends Styler_AxesChart, S extends Series> extends L Map<String, Series> map = chart.getSeriesMap(); for (Series series : map.values()) { + if (series.isShowInLegend()) { + continue; + } + Map<String, Rectangle2D> seriesTextBounds = getSeriesTextBounds(series); float legendEntryHeight = 0; -- GitLab