Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SpiderWebPlot markers, CategoryPlot optional fixed category size, Force directed labeling algorithm for XY charts #29

Open
wants to merge 48 commits into
base: master
Choose a base branch
from

Conversation

ripdajacker
Copy link

Hey

In my company we have made quite a number of changes:

CategoryPlot can have fixed category size (2010)
This change was made using a patch found on the sourceforge mailing list for JFreeChart a few years ago, so I won't take credit for this.
We draw most of our charts on PDF canvas, and a fixed category size lets us create bar charts with the same bar width/spacing throughout the document.

SpiderWebPlot has interval paints and markers with names (2012)
It's now possible to add intervals in the form of rings in the plot along with category markers.
An example of the features is seen here: Imgur

Force directed labeling algorithm (2013-2014)
We had troubles using XY charts due to the labels were all over the place. We did some research and found this article with corresponding Java code: https://www.ads.tuwien.ac.at/research/labeling/ .

The licensing was not compatible with JFreeChart so I contacted the authors and got their written permission to use the (albeit refactored) code under the LGPL.

A colleague of mine did the code import. The result is a new implementation of XYLineAndShapeRenderer called org.jfree.chart.renderer.xy.XYAutomaticLabelPlacementRenderer

All these features are used in our production systems, so we are quite confident that we have ironed out most of the bugs.

I've made an effort to merge our two source trees as close as they can get, and I hope you merge our changes.

ripdajacker and others added 30 commits December 23, 2012 17:24
…sibility for each key instead of for the entire plot. Added TextStroke to accommodate the drawing of category markers in SpiderWebPlot.
…h their respective interfaces to use generics and collections instead of raw arrays and lists.
…ue to have different positive and negative deviations. The renderer has been updated to it.
…Renderer, CategoryPlot, CategoryCrosshairState, CategoryItemLabelGenerator, CategoryToolTipGenerator, ObjectList and related.

AbstractObjectList has been refactored to GenericObjectList, that PaintList, ShapeList, StrokeList, BooleanList and ObjectList extend, thus utilizing the generic nature of it.

DatasetUtilities has some generic properties added, but this is a work in progress.

CategoryPlot has had a lot of warnings removed, most of which were unchecked calls.
… conflicts.

Conflicts:
	src/main/java/org/jfree/chart/LegendItemCollection.java
	src/main/java/org/jfree/chart/StandardChartTheme.java
	src/main/java/org/jfree/chart/plot/CategoryPlot.java
	src/main/java/org/jfree/chart/plot/Plot.java
	src/main/java/org/jfree/chart/plot/SpiderWebPlot.java
	src/main/java/org/jfree/chart/renderer/AbstractRenderer.java
	src/main/java/org/jfree/chart/renderer/category/AbstractCategoryItemRenderer.java
	src/main/java/org/jfree/chart/util/BooleanList.java
	src/main/java/org/jfree/chart/util/GenericObjectList.java
	src/main/java/org/jfree/chart/util/ObjectList.java
	src/main/java/org/jfree/chart/util/ObjectUtilities.java
	src/main/java/org/jfree/chart/util/PaintList.java
	src/main/java/org/jfree/chart/util/ShapeList.java
	src/main/java/org/jfree/chart/util/StrokeList.java
	src/main/java/org/jfree/data/ComparableObjectItem.java
	src/main/java/org/jfree/data/ComparableObjectSeries.java
	src/main/java/org/jfree/data/DefaultKeyedValues.java
	src/main/java/org/jfree/data/DefaultKeyedValues2D.java
	src/main/java/org/jfree/data/DomainOrder.java
	src/main/java/org/jfree/data/KeyedObjects.java
	src/main/java/org/jfree/data/KeyedObjects2D.java
	src/main/java/org/jfree/data/KeyedValueComparator.java
	src/main/java/org/jfree/data/KeyedValueComparatorType.java
	src/main/java/org/jfree/data/KeyedValues2D.java
	src/main/java/org/jfree/data/RangeType.java
	src/main/java/org/jfree/data/category/DefaultCategoryDataset.java
	src/main/java/org/jfree/data/general/DatasetUtilities.java
	src/main/java/org/jfree/data/statistics/DefaultStatisticalCategoryDataset.java
	src/main/java/org/jfree/data/statistics/MultiValueCategoryDataset.java
	src/test/java/org/jfree/chart/plot/SpiderWebPlotTest.java
	src/test/java/org/jfree/data/time/MonthTest.java
…generics added to AbstractCategoryItemRenderer, CategoryItemRenderer, CategoryPlot, CategoryAxis and CategoryTick. Iterable added to AbstractObjectList
Conflicts:
	pom.xml
	src/main/java/org/jfree/chart/axis/CompassFormat.java
	src/test/java/org/jfree/chart/axis/junit/CompassFormatTest.java
Removed some warnings that came as a consequence of the recent generic code.
Furthermore cleaned some javadoc, that had broken @see statements.
Conflicts:
	src/main/java/org/jfree/chart/renderer/LookupPaintScale.java
	src/test/java/org/jfree/chart/renderer/GrayPaintScaleTest.java
	src/test/java/org/jfree/chart/renderer/LookupPaintScaleTest.java
…CategoryItemRendererState, CategorySeriesLabelGenerator and StandardCategorySeriesLabelGenerator. Added fallback item label paint to the BarRenderer.
Conflicts:
	src/main/java/org/jfree/chart/axis/CyclicNumberAxis.java
	src/main/java/org/jfree/chart/axis/DateAxis.java
	src/main/java/org/jfree/chart/axis/LogAxis.java
	src/main/java/org/jfree/chart/axis/LogarithmicAxis.java
	src/main/java/org/jfree/chart/axis/NumberAxis.java
	src/main/java/org/jfree/chart/axis/NumberAxis3D.java
	src/main/java/org/jfree/chart/axis/PeriodAxis.java
	src/main/java/org/jfree/chart/axis/SymbolAxis.java
	src/main/java/org/jfree/chart/date/SerialDate.java
	src/main/java/org/jfree/chart/labels/CustomXYToolTipGenerator.java
	src/main/java/org/jfree/chart/labels/StandardCategorySeriesLabelGenerator.java
	src/main/java/org/jfree/chart/plot/CategoryMarker.java
	src/main/java/org/jfree/chart/plot/CategoryPlot.java
	src/main/java/org/jfree/chart/plot/CombinedRangeXYPlot.java
	src/main/java/org/jfree/chart/plot/FastScatterPlot.java
	src/main/java/org/jfree/chart/plot/Plot.java
	src/main/java/org/jfree/chart/plot/PolarPlot.java
	src/main/java/org/jfree/chart/plot/SpiderWebPlot.java
	src/main/java/org/jfree/chart/plot/dial/DialPlot.java
	src/main/java/org/jfree/chart/plot/dial/DialValueIndicator.java
	src/main/java/org/jfree/chart/renderer/category/AbstractCategoryItemRenderer.java
	src/main/java/org/jfree/chart/renderer/category/BarRenderer.java
	src/main/java/org/jfree/chart/renderer/category/BoxAndWhiskerRenderer.java
	src/main/java/org/jfree/chart/renderer/category/CategoryItemRenderer.java
	src/main/java/org/jfree/chart/renderer/category/LineAndShapeRenderer.java
	src/main/java/org/jfree/chart/renderer/category/ScatterRenderer.java
	src/main/java/org/jfree/chart/renderer/category/StackedBarRenderer3D.java
	src/main/java/org/jfree/chart/renderer/category/StatisticalLineAndShapeRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/XYAreaRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/XYBarRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/XYBoxAndWhiskerRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/XYDifferenceRenderer.java
	src/main/java/org/jfree/chart/text/TextBlock.java
	src/main/java/org/jfree/chart/text/TextLine.java
	src/main/java/org/jfree/chart/util/ObjectList.java
	src/main/java/org/jfree/chart/util/Rotation.java
	src/main/java/org/jfree/data/ComparableObjectItem.java
	src/main/java/org/jfree/data/DefaultKeyedValue.java
	src/main/java/org/jfree/data/DefaultKeyedValues.java
	src/main/java/org/jfree/data/DefaultKeyedValues2D.java
	src/main/java/org/jfree/data/KeyedObjects.java
	src/main/java/org/jfree/data/KeyedObjects2D.java
	src/main/java/org/jfree/data/KeyedValueComparator.java
	src/main/java/org/jfree/data/category/DefaultCategoryDataset.java
	src/main/java/org/jfree/data/gantt/SlidingGanttCategoryDataset.java
	src/main/java/org/jfree/data/statistics/DefaultMultiValueCategoryDataset.java
	src/main/java/org/jfree/data/statistics/DefaultStatisticalCategoryDataset.java
	src/main/java/org/jfree/data/statistics/MeanAndStandardDeviation.java
	src/main/java/org/jfree/data/statistics/Statistics.java
	src/main/java/org/jfree/data/time/DynamicTimeSeriesCollection.java
	src/main/java/org/jfree/data/time/TimePeriodValues.java
	src/main/java/org/jfree/data/time/TimePeriodValuesCollection.java
	src/main/java/org/jfree/data/time/TimeSeriesCollection.java
	src/main/java/org/jfree/data/time/TimeSeriesDataItem.java
	src/main/java/org/jfree/data/time/TimeSeriesTableModel.java
	src/main/java/org/jfree/data/xy/XYDataItem.java
	src/test/java/org/jfree/chart/renderer/category/StackedBarRenderer3DTest.java
	src/test/java/org/jfree/data/time/MonthTest.java
Jesenko Mehmedbasic added 3 commits May 21, 2014 10:59
Conflicts:
	src/main/java/org/jfree/chart/ChartFactory.java
	src/main/java/org/jfree/chart/ChartPanel.java
	src/main/java/org/jfree/chart/JFreeChart.java
	src/main/java/org/jfree/chart/LegendItem.java
	src/main/java/org/jfree/chart/LegendItemCollection.java
	src/main/java/org/jfree/chart/MouseWheelHandler.java
	src/main/java/org/jfree/chart/PaintMap.java
	src/main/java/org/jfree/chart/StandardChartTheme.java
	src/main/java/org/jfree/chart/StrokeMap.java
	src/main/java/org/jfree/chart/annotations/XYPolygonAnnotation.java
	src/main/java/org/jfree/chart/axis/Axis.java
	src/main/java/org/jfree/chart/axis/CategoryAxis.java
	src/main/java/org/jfree/chart/axis/CategoryTick.java
	src/main/java/org/jfree/chart/axis/ExtendedCategoryAxis.java
	src/main/java/org/jfree/chart/axis/MarkerAxisBand.java
	src/main/java/org/jfree/chart/axis/PeriodAxisLabelInfo.java
	src/main/java/org/jfree/chart/axis/SubCategoryAxis.java
	src/main/java/org/jfree/chart/axis/ValueAxis.java
	src/main/java/org/jfree/chart/demo/BarChartDemo1.java
	src/main/java/org/jfree/chart/entity/StandardEntityCollection.java
	src/main/java/org/jfree/chart/labels/AbstractXYItemLabelGenerator.java
	src/main/java/org/jfree/chart/labels/MultipleXYSeriesLabelGenerator.java
	src/main/java/org/jfree/chart/labels/StandardPieSectionLabelGenerator.java
	src/main/java/org/jfree/chart/panel/CrosshairOverlay.java
	src/main/java/org/jfree/chart/plot/CategoryPlot.java
	src/main/java/org/jfree/chart/plot/CombinedDomainCategoryPlot.java
	src/main/java/org/jfree/chart/plot/CombinedDomainXYPlot.java
	src/main/java/org/jfree/chart/plot/CombinedRangeCategoryPlot.java
	src/main/java/org/jfree/chart/plot/Crosshair.java
	src/main/java/org/jfree/chart/plot/DefaultDrawingSupplier.java
	src/main/java/org/jfree/chart/plot/MeterPlot.java
	src/main/java/org/jfree/chart/plot/MultiplePiePlot.java
	src/main/java/org/jfree/chart/plot/PiePlot.java
	src/main/java/org/jfree/chart/plot/Plot.java
	src/main/java/org/jfree/chart/plot/PlotRenderingInfo.java
	src/main/java/org/jfree/chart/plot/ThermometerPlot.java
	src/main/java/org/jfree/chart/plot/XYPlot.java
	src/main/java/org/jfree/chart/plot/dial/AbstractDialLayer.java
	src/main/java/org/jfree/chart/renderer/AbstractRenderer.java
	src/main/java/org/jfree/chart/renderer/DefaultPolarItemRenderer.java
	src/main/java/org/jfree/chart/renderer/WaferMapRenderer.java
	src/main/java/org/jfree/chart/renderer/category/AbstractCategoryItemRenderer.java
	src/main/java/org/jfree/chart/renderer/category/CategoryItemRenderer.java
	src/main/java/org/jfree/chart/renderer/category/LevelRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/AbstractXYItemRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/CandlestickRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/StackedXYAreaRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/StandardXYItemRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/XYLineAndShapeRenderer.java
	src/main/java/org/jfree/chart/renderer/xy/XYSplineRenderer.java
	src/main/java/org/jfree/chart/resources/JFreeChartResources.java
	src/main/java/org/jfree/chart/text/TextUtilities.java
	src/main/java/org/jfree/chart/title/LegendTitle.java
	src/main/java/org/jfree/chart/ui/RectangleAnchor.java
	src/main/java/org/jfree/chart/ui/about/AboutFrame.java
	src/main/java/org/jfree/chart/ui/about/BasicProjectInfo.java
	src/main/java/org/jfree/chart/ui/about/ContributorsPanel.java
	src/main/java/org/jfree/chart/ui/about/ContributorsTableModel.java
	src/main/java/org/jfree/chart/ui/about/LibraryPanel.java
	src/main/java/org/jfree/chart/ui/about/LibraryTableModel.java
	src/main/java/org/jfree/chart/ui/about/ProjectInfo.java
	src/main/java/org/jfree/chart/ui/about/SystemPropertiesTableModel.java
	src/main/java/org/jfree/chart/util/AbstractObjectList.java
	src/main/java/org/jfree/chart/util/AttributedStringUtils.java
	src/main/java/org/jfree/chart/util/HashUtils.java
	src/main/java/org/jfree/chart/util/ObjectUtilities.java
	src/main/java/org/jfree/chart/util/PaintList.java
	src/main/java/org/jfree/chart/util/PaintUtils.java
	src/main/java/org/jfree/chart/util/SerialUtils.java
	src/main/java/org/jfree/chart/util/ShapeList.java
	src/main/java/org/jfree/chart/util/ShapeUtils.java
	src/main/java/org/jfree/chart/util/StrokeList.java
	src/main/java/org/jfree/data/ComparableObjectSeries.java
	src/main/java/org/jfree/data/KeyToGroupMap.java
	src/main/java/org/jfree/data/KeyedObject.java
	src/main/java/org/jfree/data/extension/DatasetIterator.java
	src/main/java/org/jfree/data/function/PolynomialFunction2D.java
	src/main/java/org/jfree/data/gantt/TaskSeries.java
	src/main/java/org/jfree/data/gantt/TaskSeriesCollection.java
	src/main/java/org/jfree/data/general/DatasetUtilities.java
	src/main/java/org/jfree/data/general/DefaultKeyedValueDataset.java
	src/main/java/org/jfree/data/general/Series.java
	src/main/java/org/jfree/data/statistics/BoxAndWhiskerItem.java
	src/main/java/org/jfree/data/statistics/DefaultBoxAndWhiskerCategoryDataset.java
	src/main/java/org/jfree/data/statistics/DefaultBoxAndWhiskerXYDataset.java
	src/main/java/org/jfree/data/statistics/HistogramDataset.java
	src/main/java/org/jfree/data/statistics/MeanAndStandardDeviation.java
	src/main/java/org/jfree/data/statistics/SimpleHistogramDataset.java
	src/main/java/org/jfree/data/time/TimeSeries.java
	src/main/java/org/jfree/data/time/ohlc/OHLCSeriesCollection.java
	src/main/java/org/jfree/data/xy/DefaultTableXYDataset.java
	src/main/java/org/jfree/data/xy/DefaultXYZDataset.java
	src/main/java/org/jfree/data/xy/IntervalXYDelegate.java
	src/main/java/org/jfree/data/xy/MatrixSeriesCollection.java
	src/main/java/org/jfree/data/xy/VectorSeriesCollection.java
	src/main/java/org/jfree/data/xy/XIntervalSeriesCollection.java
	src/main/java/org/jfree/data/xy/XYIntervalSeriesCollection.java
	src/main/java/org/jfree/data/xy/XYRangeInfo.java
	src/main/java/org/jfree/data/xy/XYSeries.java
	src/main/java/org/jfree/data/xy/XYSeriesCollection.java
	src/main/java/org/jfree/data/xy/YIntervalSeriesCollection.java
	src/test/java/org/jfree/chart/BarChart3DTest.java
	src/test/java/org/jfree/chart/BarChartTest.java
	src/test/java/org/jfree/chart/ChartPanelTest.java
	src/test/java/org/jfree/chart/HashUtilitiesTest.java
	src/test/java/org/jfree/chart/JFreeChartTest.java
	src/test/java/org/jfree/chart/LegendItemCollectionTest.java
	src/test/java/org/jfree/chart/LineChart3DTest.java
	src/test/java/org/jfree/chart/StackedBarChart3DTest.java
	src/test/java/org/jfree/chart/StandardChartThemeTest.java
	src/test/java/org/jfree/chart/annotations/XYBoxAnnotationTest.java
	src/test/java/org/jfree/chart/annotations/XYDrawableAnnotationTest.java
	src/test/java/org/jfree/chart/annotations/XYImageAnnotationTest.java
	src/test/java/org/jfree/chart/axis/AxisTest.java
	src/test/java/org/jfree/chart/axis/CategoryAxis3DTest.java
	src/test/java/org/jfree/chart/axis/CompassFormatTest.java
	src/test/java/org/jfree/chart/axis/CyclicNumberAxisTest.java
	src/test/java/org/jfree/chart/axis/LogAxisTest.java
	src/test/java/org/jfree/chart/axis/LogarithmicAxisTest.java
	src/test/java/org/jfree/chart/axis/ModuloAxisTest.java
	src/test/java/org/jfree/chart/axis/NumberAxis3DTest.java
	src/test/java/org/jfree/chart/axis/PeriodAxisTest.java
	src/test/java/org/jfree/chart/axis/SubCategoryAxisTest.java
	src/test/java/org/jfree/chart/axis/SymbolAxisTest.java
	src/test/java/org/jfree/chart/labels/StandardPieSectionLabelGeneratorTest.java
	src/test/java/org/jfree/chart/plot/CategoryPlotTest.java
	src/test/java/org/jfree/chart/plot/MultiplePiePlotTest.java
	src/test/java/org/jfree/chart/plot/PiePlotTest.java
	src/test/java/org/jfree/chart/plot/PlotTest.java
	src/test/java/org/jfree/chart/plot/PolarPlotTest.java
	src/test/java/org/jfree/chart/plot/RingPlotTest.java
	src/test/java/org/jfree/chart/plot/SpiderWebPlotTest.java
	src/test/java/org/jfree/chart/plot/XYPlotTest.java
	src/test/java/org/jfree/chart/renderer/AbstractRendererTest.java
	src/test/java/org/jfree/chart/renderer/category/AbstractCategoryItemRendererTest.java
	src/test/java/org/jfree/chart/renderer/category/BarRenderer3DTest.java
	src/test/java/org/jfree/chart/renderer/category/LineRenderer3DTest.java
	src/test/java/org/jfree/chart/renderer/xy/AbstractXYItemRendererTest.java
	src/test/java/org/jfree/chart/renderer/xy/StandardXYItemRendererTest.java
	src/test/java/org/jfree/chart/renderer/xy/XYLine3DRendererTest.java
	src/test/java/org/jfree/chart/title/ImageTitleTest.java
	src/test/java/org/jfree/chart/title/LegendGraphicTest.java
	src/test/java/org/jfree/chart/util/LineUtilsTest.java
	src/test/java/org/jfree/data/RangeTest.java
	src/test/java/org/jfree/data/function/LineFunction2DTest.java
	src/test/java/org/jfree/data/general/DefaultPieDatasetTest.java
	src/test/java/org/jfree/data/statistics/HistogramBinTest.java
	src/test/java/org/jfree/data/statistics/HistogramDatasetTest.java
	src/test/java/org/jfree/data/statistics/SimpleHistogramBinTest.java
	src/test/java/org/jfree/data/statistics/SimpleHistogramDatasetTest.java
	src/test/java/org/jfree/data/time/TimeSeriesCollectionTest.java
	src/test/java/org/jfree/data/time/TimeSeriesTest.java
	src/test/java/org/jfree/data/xy/DefaultIntervalXYDatasetTest.java
	src/test/java/org/jfree/data/xy/DefaultTableXYDatasetTest.java
	src/test/java/org/jfree/data/xy/DefaultXYZDatasetTest.java
	src/test/java/org/jfree/data/xy/MatrixSeriesCollectionTest.java
	src/test/java/org/jfree/data/xy/VectorSeriesCollectionTest.java
	src/test/java/org/jfree/data/xy/XYDataItemTest.java
	src/test/java/org/jfree/data/xy/XYSeriesCollectionTest.java
	src/test/java/org/jfree/data/xy/XYSeriesTest.java
@buildhive
Copy link

David Gilbert » jfreechart-fse #95 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

…needed. Created two new methods in SerialUtils to handle maps of Stroke. Updated the test to reflect the changes.
@buildhive
Copy link

David Gilbert » jfreechart-fse #96 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

@buildhive
Copy link

David Gilbert » jfreechart-fse #97 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

@ripdajacker
Copy link
Author

I've fixed a couple of the tests that were broken, but can't seem to figure out why ValueAxisTest#test3555275 fails. That's the only one left.

https://buildhive.cloudbees.com/job/jfree/job/jfreechart-fse/org.jfree.chart$jfreechart-fse/97/testReport/org.jfree.chart.axis/ValueAxisTest/test3555275/

@matinh
Copy link

matinh commented May 21, 2014

Just one hint: you (or probably your IDE) did many whitespaces only changes. This is very annoying, increases the patch-size and hides the actual changes. It would be much better if you could revert these changes.

@buildhive
Copy link

David Gilbert » jfreechart-fse #98 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

@buildhive
Copy link

David Gilbert » jfreechart-fse #99 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

@buildhive
Copy link

David Gilbert » jfreechart-fse #100 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

@buildhive
Copy link

David Gilbert » jfreechart-fse #101 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

@buildhive
Copy link

David Gilbert » jfreechart-fse #102 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

@buildhive
Copy link

David Gilbert » jfreechart-fse #103 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

@ripdajacker
Copy link
Author

I've tried to minimize the line ending changes. From what I can see there are only changes to line endings/whitespace in the files that have code changes too.

@buildhive
Copy link

David Gilbert » jfreechart-fse #104 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

@buildhive
Copy link

David Gilbert » jfreechart-fse #105 UNSTABLE
Looks like there's a problem with this pull request
(what's this?)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants