Version 2.0.0, not yet released.
JFreeChart is a comprehensive free chart library for the Java™ platform that can be used on the client-side (JavaFX and Swing) or the server side, with export to multiple formats including SVG, PNG and PDF.
The home page for the project is:
http://www.jfree.org/jfreechart
JFreeChart requires JDK 11 or later. For Java 8 support, check the v1.5.x
branch.
The library is licensed under the terms of the GNU Lesser General Public License (LGPL) version 2.1 or later.
JFreeChart can be used with JavaFX via the JFreeChart-FX
extensions:
https://github.com/jfree/jfreechart-fx
A small set of demo applications can be found in the following projects here at GitHub:
A more comprehensive set of demos, plus the JFreeChart Developer Guide, is a reward at most tiers of the JFree sponsorship program. Thanks for supporting the JFree projects!
To use JFreeChart in your projects, add the following dependency to your build tool:
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.3</version>
</dependency>
You can build JFreeChart using Maven by issuing the following command from the root directory of the project:
mvn clean install
The build requires JDK 11 or later.
When migrating from JFreeChart 1.0.x to JFreeChart 1.5.0, please be aware of the following API changes:
getBaseXXX()/setBaseXXX()
have been renamed setDefaultXXX()/getDefaultXXX()
;ChartUtilities
class has been renamed ChartUtils
;SegmentedTimeline
class has been removed due to being (a) complex, (b) not always being correct and, as a result, generating too many support requests;org.jfree.chart.utils.ParamChecks
class has been renamed org.jfree.chart.utils.Args
.Please refer to Issue 66 for additional info.
ThreadLocal
for calendars in time series datasets (#171);valueVisible
flag to MeterPlot
(#231);ChartPanel
to handle high DPI displays (#170);ChartPanel
(#172);ClusteredXYBarRenderer
(#89);PeriodAxis
(#198);NumberAxis
(bug #64);LogAxis
with number format override (#98);TextTitle
to throw IllegalArgumentException
rather than NullPointerException
(#205);ObjectUtils
class (#163);URLUtilities
class (#162)LayeredBarRenderer
(bugs #169 and #175);DefaultPieDataset
(bugs #212)isJFreeSVGAvailable()
method (bugs #207)BoxAndWhiskerRenderer
(#79);DefaultIntervalCategoryDataset
no longer allows null keys in constructor (this
is a consequence of introducing generics);ChartFactory
;XYStepRenderer
;DateAxis.previousStandardDate()
method;SegmentedDateAxis
;CategoryPlot
mapping datasets to axes;ChartCanvas
class;CombinedDomainXYPlot
and CombinedRangeXYPlot
now take into account the pannable flags in the subplots;FastScatterPlot
panning direction is corrected;FXGraphics2D
;LogAxis
labelling;RingPlot
;stepPoint
attribute in the XYStepAreaRenderer
;XYSplineRenderer
with new area fill (contributed by Klaus Rheinwald);AbstractDataset
;TimeSeriesCollection
to validate TimeSeries
keys for uniqueness;DirectionalGradientPaintTransformer
(by Peter Kolb);OHLCSeries
;HMSNumberFormat
;DateAxis
;BorderArrangement.add()
possible ClassCastException
;XYSeriesCollection.removeSeries(int)
does not deregister listener;WaterfallBarRenderer
uses wrong color for diff 0.THIS RELEASE REQUIRES JDK/JRE 1.6.0 OR LATER.
AttributedString
);ChartFactory
methods;DatasetUtilities
to interpolate y-values in XYDatasets
;CategoryAxis
;SWTGraphics2D
implementation; All the JUnit tests have been upgraded to JUnit 4.
PeriodAxis
;Also fixed a line drawing issue with the StackedXYAreaRenderer
, and a memory
leak in the SWT ChartComposite
class.
XYBarRenderer
;PolarPlot
;StandardDialScale
;This release also fixes a minor security flaw in the DisplayChart
class, detected and reported by OSI Security:
http://www.osisecurity.com.au/advisories/jfreechart-path-disclosure
LegendTitle
order attribute (by Simon Kaczor);ChartComposite
does not dispose popup (by Sebastiao Correia);PaintAlpha
for 3D effects (by Dave Law);XYPlots
;ValueAxis.reserveSpace()
problem for axes with fixed dimension;DeviationRenderer
optimisation (by Milan Ramaiya);SWTGraphics2D
get/setStroke()
problem;DefaultPolarItemRenderer
does not populate seriesKey
in LegendItem
;SWTGraphics2D
(by Kevin Xu);DateAxis
endless loop (by Martin Hoeller);TimeSeries
calculates range incorrectly in addOrUpdate()
;TimeSeriesCollection.findRangeBounds()
regression;XYDifferenceRenderer
fix (by Patrick Schlott/Christoph Schroeder);DisplayChart
servlet;Also fixed a rendering issue for polar charts using an inverted axis.
This release contains:
PolarPlot
;TimeSeriesCollection
class;BoxAndWhiskerRenderer
;XYZDatasets
;CategoryPointerAnnotation
line calculation;HistogramDataset.addSeries()
fires change change event (by Thomas A Caswell);BoxAndWhiskerRenderer
(by Peter Becker);useOutlinePaint
flag for BoxAndWhiskerRenderer
(by Peter Becker);PolarPlot
enhancements (by Martin Hoeller);findRangeBounds()
in various renderers.PolarPlot
doesn't work with logarithmic axis;LineChart3D
- Problem with Item Labels;LogAxis
endless loop;TextAnnotation
;RelativeDateFormatTest.java
is locale dependent;ChartPanel
, CompassPlot
and PiePlot3D
;RingPlot
should respect getSectionOutlineVisible()
;clear()
method in CategoryTableXYDataset
;PolarChartPanel
localisation fix;NaN
in DefaultStatisticalCategoryDataset
;StackedXYBarRenderer
should respect series/item visible flags;getDomain/RangeBounds()
for XYShapeRenderer
;AbstractCategoryRenderer
fix null check in getLegendItems()
;StandardDialScale
check majorTickIncrement
argument;TimeTableXYDataset
should support Comparable
for series keys;BoxAndWhiskerRenderer
should fire change event in setMedianVisible()
;IntervalCategoryDataset
and IntervalXYDataset
, fix iterateRangeBounds()
in DatasetUtilities
;AbstractXYItemRenderer
drawAnnotations
doesn't set renderer index;StatisticalBarRenderer
;XYPointerAnnotation
arrow drawing;AreaRenderer
doesn't respect AreaRendererEndType.LEVEL
;Also fixed:
PiePlot
;minY
and maxY
in TimeSeries.createCopy()
;TimeTableXYDataset
constructor;XYSeriesCollection
;HistogramDataset
fires a change event in addSeries()
;PowerFunction2D
, NormalDistributionFunction2D
, and LineFunction2D
;AreaRenderer
class when the plot has an horizontal orientation.SPECIAL NOTICE: There will be a birds-of-a-feather session for JFreeChart at this year's JavaOne conference in San Francisco. The session is scheduled for 6.45pm to 7.35pm on Wednesday 3 June.
This release contains:
ChartPanel
class to support copying charts to the clipboard,
panning and mouse-wheel zooming, and an overlay mechanism that supports
crosshairs;CategoryItemRenderer
implementations to ensure that
they respect the seriesVisible
flags;TimeSeries
class so that it is no longer necessary to
specify the time period type in the constructor;SamplingXYLineRenderer
for improving the performance of time series
charts with large datasets;XYSeries/XYSeriesCollection
classes now cache the minimum and maximum
data values to improve the performance of charts with large datasets;XYBarRenderer
class;errorIndicatorStroke
field for the StatisticalLineAndShapeRenderer
and XYErrorRenderer
classes;HeatMapDataset
interface, DefaultHeatMapDataset
implementation,
and a HeatMapUtilities
class to make it easier to create heat map charts;XYDataImageAnnotation
to be included in the
automatic range calculation for the axes;XYTextAnnotation
class;sampleFunction2DToSeries()
method to the DatasetUtilities
class;ChartPanel
class that help to work around a regression in
JRE 1.6.0_10 relating to drawing in XOR mode. Regarding this final point:
useBuffer
flag has changed to true, which means
that all charts will, by default, be rendered into an off-screen image
before being displayed in the ChartPanel
;useBuffer
flag has been set to false.
For most usage, this should improve performance (but at the cost of using more
memory for each ChartPanel
used in your application);StandardDialScale
ignored tickLabelPaint
;Stroke
selection in plot property editor;SWTGraphics2D.fillPolygon()
not implemented;Month
constructor ignores Locale;ChartPanel
sending multiple events;PeriodAxis.setRange()
method doesn't take into account that the axis
displays whole periods;In addition, a bug in the SlidingCategoryDataset
class has been fixed, the
correct outline paint is now used by GradientXYBarPainter
, a new method
has been added to the ImageMapUtilities
class to escape special characters
in Javascript strings to avoid problems with the OverLIB and DynamicDrive
tooltips, and there are some important fixes in the LogAxis
class.
This release passes 2110 JUnit tests (0 failures) on JRE 1.6.0_12.
This release adds
XYSeries
class (relating to the addOrUpdate()
method);This release passes 1996 JUnit test (0 failures) on JRE 1.6.0_10.
CategoryPlot
: added mapDatasetToDomainAxes()
and mapDatasetToRangeAxes()
methods;Month
: added a new constructor Month(Date, TimeZone, Locale)
and deprecated Month(Date, TimeZone)
;Quarter
: added a new constructor Quarter(Date, TimeZone, Locale)
and deprecated Quarter(Date, TimeZone)
;XYPlot
: added mapDatasetToDomainAxes()
and mapDatasetToRangeAxes()
methods;Year
: added a new constructor Year(Date, TimeZone, Locale)
and deprecated Year(Date, TimeZone)
;XYAreaRenderer
with dashed outline - performance problem;StackedAreaChart
has gaps;NullPointerException
for SubCategoryAxis
on plot with null dataset;XYLineAnnotation
with dashed stroke;SWTBarChartDemo1
throws RuntimeException
;DateAxis
tick label position error;RingPlot
;XYStepRenderer
item labels;XYSeries.addOrUpdate()
problem.Also fixed StackedXYBarRenderer
which was ignoring the shadowsVisible
attribute.
This release features:
BarPainter
mechanism to enhance the appearance of bar charts;XYShapeRenderer
class;XYDrawableAnnotation
for drawing images within specific data coordinates;XYTaskDataset
, XYDataImageAnnotation
and XYTitleAnnotation
);Year
class to support an extended range; There is an important bug fix for the StackedBarRenderer3D
class (see bug 2031407).
This release passes 1,961 JUnit tests (0 failures) on JRE 1.6.0_07.
AbstractRenderer
- added clearSeriesPaints()
and clearSeriesStrokes()
methods;BarRenderer
- added shadowPaint
attribute;CategoryAxis
- added getCategoryMiddle()
method;CategoryPlot
- added getRendererCount()
method;ChartFactory
- added get/setChartTheme()
methods;ChartPanel
- increased default maximum drawing width and height;ChartTheme
- new interface;ChartUtilities
- added applyCurrentTheme()
method;CompositeTitle
- added backgroundPaint
attribute;GradientBarPainter
- new class;LegendTitle
- added getWrapper()
method;OHLCSeriesCollection
- added xPosition
attribute;PaintScaleLegend
- new subdivisions field;PiePlot
- added autoPopulate
flags, and methods to clear section attributes;Plot
- added setDrawingSupplier()
method;RegularTimePeriod
- the DEFAULT_TIME_ZONE
field has been deprecated in this release;RelativeDateFormat
- added methods to control formatting of hours and minutes - see patch 2033092;StandardChartTheme
- new class;XYItemRendererState
- new methods;XYPlot
- added getRendererCount()
method;XYShapeRenderer
- new class;XYTaskDataset
- new class.XYItemRendererState
[Ulrich Voigt];CompositeTitle
drawing fix;RelativeDateFormat
[Cole Markham];ChartComposite
listener type;StackedBarRenderer3D
;WaferMapRenderer
;LegendItemEntity
for pie charts;Also fixed drawing of alternate grid bands in SymbolAxis
, the totalWeight
calculation in the CombinedXXXPlot
classes, a NullPointerException
in the
XYPlot
class when drawing quadrants, outline visibility in the
CategoryPlot
class, and auto-range calculations with XYBarRenderer
.
This release contains various bug fixes and minor enhancements to JFreeChart.
This release passes 1,929 JUnit tests (0 failures) on JRE 1.6.0_03.
PublicCloneable
is now implemented by a number of classes that didn't previously implement the interface - this should improve the reliability of chart cloning.
The DatasetUtilities.sampleFunction2D()
has been changed to sample the correct
number of points - you should check any code that calls this method. The
XYBlockRenderer
class now generates entities. Bugs in the removeDomainMarker()
and removeRangeMarker()
methods in the CategoryPlot
and XYPlot
classes have
been fixed. A bug in the TimePeriodValues
range calculation has been fixed.
Fixes were applied to the clone()
methods in the TaskSeries
and
TaskSeriesCollection
classes.
Two new classes CombinedCategoryPlot
and CombinedXYPlot
have been added to the
'experimental' source tree - these were contributed by Richard West (see
patch 1924543).
This release contains an important security patch as well as various bug fixes and minor enhancements. Regarding the security patch, please see the following advisory:
http://www.rapid7.com/advisories/R7-0031.jsp
Note that the fix incorporated in the special JFreeChart 1.0.8a release was flawed in that it broke the URLs in the HTML image maps generated by JFreeChart. Further amendments have been made in this release to fix this problem.
A number of classes have new methods. Nothing has been removed or deprecated:
In addition, a bug in the constructor for the Week class has been fixed.
This release is primarily a bug fix release:
DefaultCategoryDataset
class (and underlying KeyedValues2D
class);TimeSeries
class. In addition:
StatisticalBarRenderer
class has a new errorIndicatorStroke
field and has been updated to support gradients;StandardDialScale
has had some missing accessor methods implemented;StandardXYItemRenderer
class has been deprecated;This release features
DialPlot
and LogAxis
(previously in experimental);ChartPanel
class;CategoryAxis
- added getCategorySeriesMiddle()
method;CategoryPlot
- added methods to remove markers;ChartPanel
- added defaultDirectoryForSaveAs
attribute;DialPlot
- new class, an alternative to MeterPlot
;LogAxis
- new class, an alternative to LogarithmicAxis
;NumberTick
- new constructor that allows specification of the tick type;NumberTickUnit
- new constructor to specify the minor tick count;SymbolAxis
- new methods get/setGridBandAlternatePaint()
;TickType
- new class;TickUnit
- added minorTickCount
attribute;ValueTick
- added tickType
attribute;StandardPieSectionLabelGenerator
- new constructors accepting a Locale;StandardPieToolTipGenerator
- likewise;CategoryPlot
- added getRangeAxisIndex()
, zoomDomainAxes()
and zoomRangeAxes()
methods;FastScatterPlot
- added new zooming methods;PiePlot
- new attributes to support simple labeling;PlotUtilities
- new class;PolarPlot
- added new zooming methods;ThermometerPlot
- likewise;XYPlot
- added methods to remove markers (patch 1823697--same as for CategoryPlot
), and added new zooming methods; Zoomable
- added new zooming methods to this interface;LineAndShapeRenderer
- added useSeriesOffset
and itemMargin
attributes;MinMaxCategoryRenderer
- implemented equals()
;XYSplineAndShapeRenderer
- new class;LogFormat
- new class;ChartFactory
- new pie and ring chart creation methods that accept a Locale
;ChartPanel
- added zoomAroundAnchor
attribute;Series
- added isEmpty()
method;BoxAndWhiskerItem
- new convenience constructor;DefaultBoxAndWhiskerCategoryDataset
- new remove methods;DefaultStatisticalCategoryDataset
- likewise;MeanAndStandardDeviation
- added new value accessor methods;TimeTableXYDataset
- added clear()
method;Week
- added new constructor;KeyedObjects
- added insertValue()
and clear()
methods;KeyedObjects2D
- added clear()
method.XYDifferenceRenderer
to support item labels;NullPointerException
in XYBarRenderer
;GrayPaintScale.getPaint()
uses wrong value;XYBarRenderer
does not render margins correctly;Marker.listenerList
serializable;StatisticalBarRenderer
NPE;XYBlockRenderer
can't handle empty datasets;PeriodAxis
labels fail to display with setInverted;LogAxis
(Demo1);JFreeChart
not added as TitleChangeListener
; This release features:
VectorRenderer
(previously in experimental);XYDifferenceRenderer
;GradientPaint
in plot backgrounds;CategoryItemEntity
- replaced row and column index attributes with row and column key attributes;CategoryItemRenderer
- numerous series override settings have been deprecated;DefaultPieDataset
- added insertValues()
method;HexNumberFormat
- new class;LegendItem
- added dataset and seriesKey attributes;Plot
- added new fillBackground()
method to support GradientPaint
, and added is/setOutlineVisible()
methods;QuarterDateFormat
- added GREEK_QUARTERS
field plus a new constructor;SimpleHistogramDataset
- added clearObservations()
and removeAllBins()
methods;TimeSeriesCollection
- added indexOf()
method;URLUtilities
- new class;XYItemRenderer
- numerous series override settings have been deprecated;XYSeriesCollection
- added indexOf() method.ClusteredXYBarRenderer
fails with inverted x-axis;ChartComposite
tooltips;StackedBarRenderer3D
doesn't fill shadows;StackedBarRenderer3D
doesn't check drawBarOutline
flag;DefaultBoxAndWhiskerCategoryDataset
doesn't follow contracts;CombinedDomainXYPlot
;HideSeriesDemo1
does not work;removeValue()
of DefaultKeyedValues2D
;LegendItemEntity
needs dataset index;URLEncoder.encode()
for URL generators;Plus the following bugs that didn't have entries in the database:
BarRenderer
- check for series visibility in getLegendItem()
;ChartPanel
- use correct insets for painting chart buffer to screen, update UI for popup menu if LookAndFeel changes;DateAxis
- fixed boundary cases for previousStandardDate()
method;LineBorder
- only draw border if area has positive dimensions;JFreeChart
- should register as a listener with the default legend;StandardXYItemRenderer
- fixed a problem where chart entities are created for non-visible items;TimePeriodValuesCollection.getDomainBounds()
now computes the bounds correctly;XYLineAndShapeRenderer
- fixed a problem where chart entities are created for non-visible items;XYLine3DRenderer
- equals()
implemented, and serialization fixed;XYTitleAnnotation
- fixed equals()
method;ChartComposite
class;This release features:
DeviationRenderer
class;StackedXYBarRenderer
;CategoryStepRenderer
; and AbstractCategoryItemRenderer
- added createState()
method;StackedXYBarRenderer
- added get/setRenderAsPercentages()
methods;XYIntervalSeries
- added getXLowValue()
, getXHighValue()
, getYLowValue()
and getYHighValue()
;YIntervalSeries
- added getYLowValue()
and getYHighValue()
methods;DefaultCategoryDataset
does not clone data;Crosshair
incorrectly positioned in horizontal orientation;CategoryPlot.setDomainAxisLocation()
ignores parameter;Spider
and MeterPlot
;IntervalMarker
with Double.POSITIVE_INFINITY
bound;IntervalMarker
with Double.MAX_VALUE as upper
bound;XYBarRenderer
does not render bars on LogarithmicAxis
;ChartPanel
with log axes;Also fixed numerous bugs in equals(), cloning and serialization implementations.
This release features:
XYBlockRenderer
class;ClusteredXYBarRenderer
, StackedXYBarRenderer
and legend graphics;XYImageAnnotation
;DateAxis
- added get/setTimeZone()
methods;DefaultXYDataset
- now implements PublicCloneable
;StackedXYAreaRenderer2
- added get/setRoundXValues()
methods;StandardXYItemLabelGenerator
- added new constructor;StandardXYToolTipGenerator
- added new constructor;XYBarDataset
- added getUnderlyingDataset()
and get/setBarWidth()
methods;XYDifferenceRenderer
- added roundXCoordinates
attribute;XYImageAnnotation
- added an image anchor attribute, a new constructor, and several accessor methods;XYSeries
- added toArray()
method;XYPlot
renderer with no corresponding dataset;RangeMarkers
do not update properly;Crosshairs
for StackedXYAreaRenderer
;IllegalArgumentException
in SWTAxisEditor
;DefaultXYDataset
;DateAxis.nextStandardDate()
ignores timezone;DateAxis
code uses the default calendar;StandardXYToolTipGenerator
missing constructor;ChartDeleter
;ChartComposite
;Minute.previous()
returns null for minute == 0;NumberFormat
;IntervalMarker
exceeds bounds of data area;SpiderWebPlot
method access;StackedBar3D
problem;XYBarDataset
hiding its proxied object;XYDifferenceRenderer
;NullPointerException
in writeImageMap()
;Also fixed numerous bugs in equals()
and clone()
methods throughout the API.
This release features:
IntervalXYDataset
implementations;PiePlot
class to support reordering of dataset items;A new DialPlot
implementation has been added to the 'experimental' sources.
We are looking for people to test this code and provide feedback, so that we
can stabilize the API and add this code to the main JFreeChart API.
The following adjustments have been made to the API:
CategoryLabelEntity
- new class;CategoryPointerAnnotation
- new class;ChartPanel
: added new public method doEditChartProperties()
;ComparableObjectItem
, ComparableObjectSeries
- new classes;CrosshairState
: added several new accessor methods;DefaultPieDataset
: added sortByKeys()
and sortByValues()
methods;Markers
: a change event mechanism has been added to the Marker
class and its subclasses;StackedAreaRenderer
: added get/setRenderAsPercentages()
methods;XIntervalDataItem
, XIntervalSeries
and XIntervalSeriesCollection
- new classes;XYErrorRenderer
: new class;XYInterval
, XYIntervalDataItem
, XYIntervalSeries
and XYIntervalSeriesCollection
- new classes;YInterval
, YIntervalDataItem
, YIntervalSeries
, YIntervalSeriesCollection
and YWithXInterval
- new classes.JDBCXYDataset
;BoxAndWhiskerRenderer
potential NullPointerException
;XYStepRenderer
with horizontal orientation;DateAxis
missing initial tick label;StatisticalLineAndShapeRenderer
constructor ignores arguments;ServletUtilities
;TimeSeries.removeAgedItems()
method problems;Marker.setAlpha()
ignored;Also fixed URL generation for legend items, tick mark positioning on the
DateAxis
, the equals()
method in the AreaRenderer
class, hardcoded outline
attributes in the XYBubbleRenderer
, and potential NullPointerExceptions
in the
ChartPanel
class.
The following adjustments have been made to the API (there should be no breakage of applications coded to the 1.0.0 or 1.0.1 API):
CategoryToPieDataset
: added accessor methods for underlying dataset, extract type and index (feature request 1477915);DefaultXYDataset
: New dataset implementation that uses double[] arrays;DefaultXYZDataset
: New dataset implementation that uses double[] arrays;LegendItemBlockContainer
: New container used in legends (enables legend item entities again);MultiplePiePlot
: Added new fields aggregatedItemsKey
and aggregatedItemsPaint
, plus accessor methods - see bug 1190647;SpiderWebPlot
: Added new fields toolTipGenerator
and urlGenerator
, plus accessor methods (see patch 1463455);StackedBarRenderer3D
: Added new flag (renderAsPercentages
), plus accessor methods, that controls whether the data items are displayed as values or percentages. Two new constructors are also added (see patch 1459313);XYPolygonAnnotation
: Added new accessor methods.renderAsPercentages
option to StackedBarRenderer3D
;SpiderWebPlot
to support zero values;SpiderWebPlot
to support mouse clicks, tool tips and URLs;Plot
class;ClusteredXYBarRenderer
with margin not drawing correctly;LineAndShapeRenderer
generates entity for non-visible item;SpiderWebPlot
with null info;AbstractPieItemLabelGenerator.clone()
doesn't clone percentFormat
;DateAxis.equals()
broken;StatisticalLineAndShapeRenderer
doesn't draw error bars correctly when the plot has a horizontal orientation;AbstractCategoryItemRenderer
doesn't check seriesVisibleInLegend
flag before creating new item;NumberAxis.equals()
ignores rangeType
field;XYPointerAnnotation.equals()
ignores x and y fields;LegendItemEntities
not working;StandardXYItemRenderer
problems with Double.NaN
;MultiplePiePlot
.CandlestickRenderer
, CyclicXYItemRenderer
, HighLowRenderer
, XYStepAreaRenderer
and TimeSeriesURLGenerator
to call dataset methods that return double primitive only;XYPolygonAnnotation
, adding new accessor methods and fixing problems in the equals()/hashCode()
methods;ChartFactory.createStackedXYAreaChart()
now uses StackedXYAreaRenderer2
, for better handling of negative values;XYBarRenderer
.In this release, some new (incomplete) classes have been included in the
org.jfree.experimental.*
namespace. These classes are not part of the
standard API, but are included for developers to experiment with and provide
feedback on. Hopefully in the future, refined versions of these classes will
be incorporated into the main library. PLEASE NOTE THAT THE API FOR THESE
CLASSES IS SUBJECT TO CHANGE.
This is primarily a bug fix release. In addition, there are some API adjustments (there should be no breakage of applications coded to the 1.0.0 API).
BarRenderer
: added a new flag (includeBaseInRange
), plus accessor
methods, that controls whether or not the base value for the bar is
included in the range calculated by the findRangeBounds()
method;BubbleXYItemLabelGenerator
: new class;Range
: added a new method expandToInclude(Range, double)
, this is used by
the BarRenderer
class;TaskSeriesCollection
: added two new methods, getSeries(int)
and
getSeries(Comparable)
;TimeSeriesCollection
: the domainIsPointsInTime
flag has been deprecated.
The flag serves no function now that renderers are used to calculate the domain
bounds, so you can safely delete any calls to the setDomainIsPointsInTime()
method;XYPlot
: added a new getAnnotations()
method;XYSeries
: the update(int, Number)
method has been deprecated and a new
method updateByIndex(int, Number)
has been added;XYBarRenderer
doesn't show entire range of values for a TimeSeriesCollection
;XYBubbleRenderer
doesn't support item labels;BarRenderer
contains JDK 1.4 specific code;LegendItem
serialization problem;Quarter
constructor;TextTitle
at LEFT or RIGHT position;RingPlot
entity incorrect;PiePlot
;BarRenderer
;NullPointerException
in CategoryAxis
;NumberAxis3D
assumes CategoryPlot
;XYTextAnnotation
equals() method doesn't check (x, y);PeriodAxis
and ModuloAxis
.org.jfree.data
and org.jfree.chart.renderer
into subpackages for 'category' and 'xy' charts.AbstractRenderer
class.GradientPaint
in interval markers.XYDataset
that return double primitives;CategoryPlot
and XYPlot
;PolarPlot
class added;XYSeries
can now be sorted or unsorted;createBufferedImage()
method can now scale charts;XYItemRenderers
;MessageFormat
class;XYBarDataset
class;DefaultTableXYDataset
class);FastScatterPlot
class;CategoryAxis
class to allow additional options for the alignment and rotation of category labels;AxisState
class, used in the drawing of axes to eliminate a bug when multiple threads draw the same axis simultaneously;DateTickUnit
class to improve labelling on a segmented DateAxis
;GradientPaint
in bar charts;PNGEncoder
; - various enhancements to the stacked area XY charts;
- added a completion indicator for the Gantt chart;
- range and domain markers can now be placed in the foreground or the
background;
- more fixes for cloning and serialization;
- fixed mouse event bug for combined charts;
- fixed bugs in the PngEncoder class;
- incorporated .properties files that were missing from the 0.9.12
distribution;
- extended box-and-whisker plots to work with the CategoryPlot class
as well as the XYPlot class (based on work by David Browning);
- added a new LayeredBarRenderer (by Arnaud Lelievre);
- added support for stacked area charts with the XYPlot class (thanks
to Richard Atkinson);
- improved HTML image map support (thanks to Richard Atkinson);
- added localized resources for the chart property editors (thanks to
Arnaud Lelievre). Current translations include French and Portugese
(thanks to Eduardo Ramalho);
- added facility for setting all rendering hints;
- improved support for cloning and serialization;
- fixed a bug in the XYSeries class that prevented the TableXYDataset
from functioning correctly;
- improved date axis labelling with segmented time lines;
- fixed several bugs in the secondary dataset/axis/renderer code;
- fixed bugs in the JDBCCategoryDataset class;
- numerous other bug fixes;
- added support for box-and-whisker plots, thanks to David Browning;
- lots of bug fixes;
- added support for multiple secondary axes, datasets and
renderers;
- minor feature enhancements and bug fixes;
PLEASE NOTE THAT MAJOR CHANGES HAVE BEEN MADE IN THIS RELEASE AND ONE OR TWO FEATURES MAY BE BROKEN. PLEASE REPORT BUGS SO THEY CAN BE FIXED FOR THE NEXT RELEASE.
- merged the HorizontalCategoryPlot and VerticalCategoryPlot classes,
into the CategoryPlot class;
- merged the horizontal and vertical axis classes;
- merged the horizontal and vertical renderer classes;
- CategoryPlot and XYPlot now support both horizontal and vertical
orientation via the setOrientation(...) method;
- merged horizontal and vertical methods in the ChartFactory class;
- created new combined plot classes: CombinedDomainCategoryPlot,
CombinedRangeCategoryPlot, CombinedDomainXYPlot and
CombinedRangeXYPlot (these can all be drawn with a horizontal or
vertical orientation);
- Bill Kelemen has enhanced the DateAxis class to handle segmented
timelines. This can be used, for example, to skip weekends for
daily stock price charts;
- Richard Atkinson has updated the ServletUtilities class;
- Bryan Scott has added an XYDatasetTableModel class for presenting
datasets in a JTable;
- modified XYPlot to allow renderers to use multiple passes through
the dataset;
- added new XYDifferenceRenderer;
- added support for colored bands between gridlines in XYPlot;
- added new XYDrawableAnnotation class;
- added a new attribute to control the order of dataset rendering in
a CategoryPlot;
- extended the value label mechanism for the renderers, to allow
better (per series) control over label generation, positioning and
visibility;
- CategoryItemTooltipGenerator has been renamed
CategoryItemLabelGenerator, since it is now being used to generated
item labels as well as tooltips;
- there is now support for horizontal stacked 3D bar charts;
- added support for range markers against secondary axis in a
CategoryPlot;
- added labels to domain and range markers;
- added a new HistogramDataset class (contributed by Jelai Wang) to
make it easier to create histograms with JFreeChart;
- moved the DrawingSupplier into the plot class, renderers now
reference the supplier from the plot (parent plot for combined and
overlaid charts). This means that renderers now share a single
DrawingSupplier by default, which simplifies the creation of
combined charts;
- changed the ColorBarAxis classes that extended the NumberAxis class,
to a single ColorBar class that wraps a ValueAxis (may have broken
one or two things in the process);
- Barak Naveh has contributed new classes MatrixSeries and
MatrixSeriesCollection, along with demos: BubblyBubblesDemo.java
and BubblyBubblesDemo2.java;
- the TextTitle class now has a background paint attribute;
- the StandardLegend class now generates LegendEntity objects if a
ChartRenderingInfo instance is supplied to the draw(...) method;
- extended the CategoryTextAnnotation class to take into account a
category anchor point. See the SurveyResultsDemo.java application
for an example;
- included numerous bug fixes;
- changed package naming from com.jrefinery.* to org.jfree.*;
- added new TimePeriodValuesCollection class;
- added MIME type code to ServletUtilities class;
- reversed the order of PieDataset and KeyedValuesDataset in
the class hierarchy;
- reversed the order of CategoryDataset and KeyedValues2DDataset
in the class hierarchy;
- minor bug fixes;
- added a new ValueDataset interface and DefaultValueDataset
class, and changed the CompassPlot class to use this instead
of MeterDataset;
- added DataUtilities class, to support creation of Pareto
charts (new demo included);
- updated writeImageMap method as suggested by Xavier Poinsard
(see Feature Request 688079);
- implemented Serializable for most classes (this is likely to
require further testing);
- incorporated contour plot updates from David M. O'Donnell;
- added new CategoryTextAnnotation and XYLineAnnotation
classes;
- added new HorizontalCategoryAxis3D class contributed by
Klaus Rheinwald;
Bug fixes:
- added a workaround for JVM crash (a JDK bug) in pie charts
with small sections (see bug report 620031);
- fixed minor bug in HorizontalCategoryPlot constructor (see
bug report 702248);
- added code to ensure HorizontalNumberAxis3D is not drawn if
it is not visible (see bug report 702466);
- added small fix for suppressed chart change events (see bug
report 690865);
- added pieIndex parameter to tooltip and URL generators for
pie charts;
- fixed bug in getLastMillisecond() method for the Second
class and the getFirstMillisecond() method for the Year
class (picked up in JUnit tests);
- in TextTitle, changed width used for relative spacing to fix
bug 703050;
- fixed null pointer exception in DefaultCategoryDataset;
- fixed update problem for PaintTable, StrokeTable and
ShapeTable objects;
- added methods to control colors in PiePlot (these were
inadvertantly removed in the changes made for 0.9.5);
- fixed auto-range update problem for secondary axis;
- fixed missing category labels in the overlaid category plot;
- fixed constructors for symbolic axes;
- corrected error in Javadoc generation (Ant script);
PLEASE NOTE THAT MAJOR CHANGES TO THE JFREECHART API HAVE BEEN MADE IN THIS RELEASE!
- added support for secondary axes, datasets and renderers;
- added new data interfaces (Value, Values, Values2D,
KeyedValues and KeyedValues2D) and incorporated these into
the existing PieDataset and CategoryDataset interfaces.
- modified the CategoryDataset interface to be more
symmetrical, data is organised in rows and columns (as
before) but can now be accessed by row/column index or
row/column key.
- added support for reading PieDatasets and CategoryDatasets
from XML files.
- created separate packages for the axes
(com.jrefinery.chart.axis), plots (com.jrefinery.chart.plot)
and renderers (com.jrefinery.chart.renderer).
- series attributes (paint, outline paint, stroke and shape)
are now controlled by the renderer classes using lookup
tables. Introduced the DrawingSupplier interface (and
DefaultDrawingSupplier class) which is used to populate the
lookup tables from a common source (necessary to coordinate
complex combined charts).
- the chart legend can now display shapes corresponding to
series.
- moved responsibility for category distribution to the
CategoryAxis class, which tidies up the code in the
CategoryPlot classes.
- gridlines are now controlled by the CategoryPlot and XYPlot
classes, not the axes (included in this change is the
addition of gridlines for the CategoryPlot domain values).
- changed the list of titles in the JFreeChart class to a
title and a list of subtitles.
- added new renderers for XYPlot (XYBubbleRenderer and
YIntervalRenderer).
- modified Gantt chart to display sub-tasks.
- added ContourPlot class (still experimental) by David
M. O'Donnell.
- introduced new MovingAverage class.
- ChartMouseEvent now includes source chart.
- numerous bug fixes.
- lots of Javadoc updates.
Added a new stacked area chart (contributed by Dan Rivett) and a compass plot (contributed by Bryan Scott). Updated the ThermometerPlot class. Added a new XYDotRenderer for scatter plots. Modified combined and overlaid plots to use the series colors specified in the sub plot rather than the parent plot (this makes it easier to align the colors in the legend). Added Regression class for linear and power regressions. BasicTimeSeries can now automatically drop "old" data. Some clean-up work in the code for tooltips and the event listener mechanism. Richard Atkinson has incorporated some useful extensions for servlets/JSP developers.
Ran Checkstyle and corrected issues reported for most classes.
Checkstyle is a free utility that you can download from:
http://checkstyle.sourceforge.net
Fixed bugs and updated documentation.
API changes include:
- added tickMarkPaint to Axis constructor (also affects
subclasses);
- added getLegendItems() to Plot, and deprecated
getLegendItemLabels();
- added getLegendItem(int) to XYItemRenderer and
CategoryItemRenderer.
- most 'protected' member variables have been changed to
'private'.
CategoryDataset
;com.jrefinery.data
package from JCommon to JFreeChart. XYSeries
; CategoriesPaint
attribute to AbstractCategoryItemRenderer
;MeterPlot
class;AnnotationDemo1
, EventFrequencyDemo
, JDBCCategoryChartDemo
, JDBCPieChartDemo
, JDBCXYChartDemo
and MinMaxCategoryPlotDemo
.Bug fixes:
PiePlot
;setXXXAxis(...)
methods;DomainInfo
method name clash;DomainIsPointsInTime
flag to TimeSeriesCollection
to give better control over auto range on axis for time series charts;JdbcCategoryDataset
;null
axis in mouse click handler.The CVS repository at SourceForge has also been restructured to match the distribution directory layout.
PiePlot
now has startAngle
and direction
attributes;Pie3DPlot
class;JFreeChartDemo
has been modified and now includes examples of the dial and thermometer plots.VerticalNumberAxis
when zero is forced to be included in the range;StackedVerticalBarRenderer3D
;ChartPanel
;HorizontalIntervalBarRenderer
now handles single category;verticalTickLabels
now possible in HorizontalNumberAxis3D
;Bug fixes and Javadoc updates.
XYPlot
;ChartPanel.mouseDragged
;ChartMouseListener
to the ChartPanel
(formerly JFreeChartPanel
);XYPlots
;VerticalLogarithmicAxis
class, and now a
corresponding HorizontalLogarithmicAxis
class; CandleStickRenderer
class from Sylvain Vieujot;XYItemRenderers
now have a change listener mechanism and therefore do not
have to be immutable;CategoryPlot
) with plug-in renderers;ResourceBundle
for user interface items that require localisation;Bug fixes.
WindPlot
code from Achilleus Mantzios;JFreeChart
class;Plot
class;Insets
class on chart titles to a new Spacer
class that will
allow for relative or absolute insets (the plan is to eventually replace all
Insets
in the JFreeChart
classes); setAutoRangeIncludesZero
method of the NumberAxis
class;com.jrefinery.chart.combination
;JFreeChartPanel
now incorporates buffering, and popup menu;JFreeChart wouldn't be half the library that it is today without the contributions (large and small) that have been made by the developers listed below:
It is possible that I have missed someone on this list, if that applies to you, please e-mail me.
Dave Gilbert (david.gilbert@object-refinery.com)
JFreeChart Project Leader