Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java @ 656:b98d1adee7a6
Added an offset of five percent between values and chart border in vertical profile charts (issue186).
gnv-artifacts/trunk@749 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Mon, 08 Mar 2010 15:15:08 +0000 |
parents | 24a85678bd39 |
children | 79401c871da4 |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java Mon Mar 08 14:04:28 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java Mon Mar 08 15:15:08 2010 +0000 @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.HashMap; +import java.util.Map; import java.util.Iterator; import java.util.Locale; @@ -9,10 +10,12 @@ import org.jfree.chart.ChartTheme; import org.jfree.chart.axis.Axis; +import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.plot.PlotOrientation; +import org.jfree.data.Range; +import org.jfree.data.general.Series; import org.jfree.data.xy.XYSeries; -import org.jfree.data.general.Series; import org.jfree.data.xy.XYSeriesCollection; import de.intevation.gnv.geobackend.base.Result; @@ -33,6 +36,10 @@ protected final double GAP_MAX_LEVEL = Math.sqrt(2.0); protected final int GAP_MAX_VALUES = 60; + /** Map to store max ranges of each parameter (axis.setAutoRange(true) + * doesn't seem to work properly. */ + protected Map values; + public VerticalProfileChart( ChartLabels labels, @@ -59,6 +66,7 @@ this.shapesVisible = shapesVisible; this.datasets = new HashMap(); this.ranges = new HashMap(); + this.values = new HashMap(); } @@ -118,9 +126,12 @@ } addValue(row, series); - Double value = row.getDouble("YORDINATE"); - if (value != null) - storeMaxRange(value, parameter); + Object x = getValue(row); + Double y = row.getDouble("YORDINATE"); + if (x != null && y != null) { + storeMaxRange(ranges, y, parameter); + storeMaxValue(values, x, parameter); + } endPos++; } @@ -134,6 +145,11 @@ } + protected Object getValue(Result row) { + return row.getDouble("XORDINATE"); + } + + protected void gapDetection( Result[] results, Series series, @@ -149,6 +165,16 @@ } + protected void prepareRangeAxis(String seriesKey, int idx) { + XYPlot plot = chart.getXYPlot(); + NumberAxis xAxis = (NumberAxis) plot.getDomainAxis(); + + Range xRange = (Range) values.get(seriesKey); + xAxis.setRange(Range.expand(xRange, LOWER_MARGIN, UPPER_MARGIN)); + log.debug("Max X-Range of dataset is: " + xRange.toString()); + } + + protected void addValue(Result row, Series series) { ((XYSeries) series).add( row.getDouble("XORDINATE"), @@ -194,6 +220,7 @@ plot.setDataset(idx, xysc ); log.debug("Added " + key + " parameter to plot."); prepareAxis(key, idx); + prepareRangeAxis(key, idx); adjustRenderer( idx++, xysc.getSeriesCount(), @@ -205,6 +232,24 @@ } + protected void storeMaxValue(Map values, Object val, String parameter) { + double value = ((Double) val).doubleValue(); + Range range = null; + + range = values.containsKey(parameter) + ? (Range) values.get(parameter) + : new Range(value, value); + + double lower = range.getLowerBound(); + double upper = range.getUpperBound(); + + lower = value < lower ? value : lower; + upper = value > upper ? value : upper; + + values.put(parameter, new Range(lower, upper)); + } + + protected void localizeDomainAxis(Axis axis, Locale locale) { // call localizeRangeAxis from superclass which formats NumberAxis super.localizeRangeAxis(axis, locale);