- Easy usage: only a few lines of code are necessary to use a chart. No complex specification of data points, labels or grids necessary. This is done per default and may optionally be configured.
- Multiple traces with different behavior may be added to a single chart.
- Performance. JChart2D is designed for dynamic rendering. Rescaling
is done per axis only and only if bounds are exceeded. New points
within bounds are scaled without affecting old scalings. Minimum and
maximum bounds of traces are cached and updated upon events. Invisible
traces are not scaled and don't affect bounds.
AWT is the bottleneck: Non-visible calculations (scaling, rounding, event-handling, label calculation) do not impose high load even if a point is added with bounds changes every 2ms. But enlarging the window does. So scaling is bound to painting and the adapting painting frequency is limited to a configurable amount of milliseconds. For rendering traces polylines are drawn by default (instead of many calls to drawline for connecting points). No comparisons to other libraries available.
- Automatic choice of the unit - prefix (multiplier) according to the scientific unit system (nano , milli, tera, ..).
- Label formatter for scale labels via java.text.NumberFormat or java.text.DateFormat.
- Chooseable display of grids, labels, labeled scalepoints, coordinate tooltips, ... .
- Toolbox of UI controls for chart and traces via popup menus and menu bar. See the applet demo. Tip: right-click on the label of the trace to get controls for it.
- Traces may be rendered via lines, discs, dots (is a disc with radius 1) or filled polygons. Additionally strokes may be specified (only useful for lines I think). An open interface for further graphical representations of traces exists.
- Different axis implementations (settable from UI): linear, log e and log 10.
- Multiple axes on top,bottom, left and right side. Traces may be assigned to an x and an y axis that has been assigned to the chart and will be related to them.
- Different viewport implementations: Zooming (ZoomableChart), enforcing visible bounds even if data does not fill them,... .
- Exact visualisation of labeled scalepoints. No label of a scalepoint is ever rounded to the next current chosen decimal, instead the scalepoint is shifted to a position which represents an exact decimal.
- Fully resizable. The amount of labeled scalepoints may increase on choosing a bigger size.
- Deadlock - safe. Even this is hard to claim because testing depends on runtime behaviour of the current system, i did not encounter a deadlock situation while letting several threads modifiy traces all contained in the same chart (only the awt painting system may get pretty busy).
- Trace - implementations with different behaviour: unordered, ringbuffered, ordered, bijective, ...
- Highly configurable error bar API.
- Support for zooming (ZoomableChart)
- Charts may be saved as images (jpeg, gif, jpg,... depending on the image writers of the java VM implementation), a snapshot UI control allows this.
- Charts may be saved as encapsulated postscript files (eps) thanks to Apache XML Graphics Commons.
- Charts may be printed (which allows to print them to a pdf driver too).
Request new features
JChart2D is quite stable now. But still some features are missing and
may be desirable. Ideas are: image - snapshots, triggers for exceeded
bounds or custom painters on trace level. But features will only be
implemented by contributors or requests for features. Open source
is not paid and personally I do it for feedback and the knowledge, that
anyone has a benefit out of it.
It will be tried to add features in a clever order: First the basic features that will be needed by the more advanced ones. This allows to keeps it clean and stable without long terms of blind development (unable to perform a build).
Regardless of the unofficial road map it is important to know, which
features are most desirable for the users.
So it is important to let us (by now only me) know about it:
Request a feature.