Tutorial
Using JSparklines is very easy and only requires a couple of lines of code. Below you will find simple code examples of how to use JSparklines in your project.
- Demos
- Single Values
- Multiple Values
- Multiple Data Series
- 2D and 3D Data Series
- Reference Lines and Areas
- Maven Dependency
For the complete source code see the JSparklines Demos found with the source code. See also the http://genesis.ugent.be/maven2/no/uib/jsparklines/javadoc.
Demos
To run the main demo, double click the file jsparklines-X.Y.Z.jar
, or use: java -jar jsparklines-X.Y.Z.jar
.
Note: Remember to first unzip the downloaded zip file before trying to run the demos.
Single Values
When displaying single numeric values in a column the simplest option is to use the JSparklinesBarChartTableCellRenderer. This renderer can be used on any table column containing most numeric objects as follows:
singleValuesJTable.getColumn("Fold Change").setCellRenderer(
new JSparklinesBarChartTableCellRenderer(
PlotOrientation.HORIZONTAL, // orientation of the plot
-5.0, // lower range for the plot
5.0, // upper range for the plot
negativeColor, // color to use for the negative values
positiveColor)); // color to use for the positive values
If the column only contains positive numbers it becomes even simpler:
singleValuesJTable.getColumn("Coverage").setCellRenderer(
new JSparklinesBarChartTableCellRenderer(
PlotOrientation.HORIZONTAL, // orientation of the plot
100.0, // upper range for the plot
positiveColor)); // color to use for the positive values
This effectively sets the lower range to zero.
Using Color Gradients
Turn on color gradient:
((JSparklinesBarChartTableCellRenderer) singleValuesJTable.getColumn(
"Peptides").getCellRenderer()).setGradientColoring(ColorGradient.BlueWhiteGreen, false);
Turn off color gradient:
((JSparklinesBarChartTableCellRenderer) singleValuesJTable.getColumn(
"Peptides").getCellRenderer()).setGradientColoring(null, false);
Show Numbers and Chart
((JSparklinesBarChartTableCellRenderer) singleValuesJTable.getColumn(
"Peptides").getCellRenderer()).showNumberAndChart(true, 40);
Notes:
- Note that when using JSparklines in this way the underlying values can be edited as normal by double clicking the cell to edit.
- Note that it is possible to change the maximum and minimum values later by using the setMaxValue(…) and setMinValue(…) methods in the renderer.
- Note that the underlying values can be shown by using the showNumbers(…) method.
Multiple Values
When displaying multiple values in a single plot one has to use the JSparklinesTableCellRenderer. In this case the values to be plotted first has to be added to a JSparklineDataset, and this object then added to the table cell.
// add the data points to display to an arraylist
ArrayList<Double> dataA = new ArrayList<Double>();
dataA.add(new Double(2.4));
dataA.add(new Double(4.1));
...
dataA.add(new Double(1.3));
// create a JSparklineDataSeries
JSparklinesDataSeries sparklineDataseriesA = new JSparklinesDataSeries(
dataA, Color.DARK_GRAY, "Dataset A");
// add the data series to JSparklineDataset
ArrayList<JSparklinesDataSeries> sparkLineDataSeriesAll = new ArrayList<JSparklinesDataSeries>();
sparkLineDataSeriesAll.add(sparklineDataseriesA);
JSparklinesDataset dataset = new JSparklinesDataset(sparkLineDataSeriesAll);
// add the data to the table
((DefaultTableModel) multipleValuesJTable.getModel()).addRow(new Object[]{"Protein " + (j + 1), dataset});
// set the JSparklines renderer
multipleValuesJTable.getColumn("Change").setCellRenderer(
new JSparklinesTableCellRenderer(
JSparklinesTableCellRenderer.PlotType.lineChart, // plot type
PlotOrientation.VERTICAL, // plot orientation
0.0, // lower plot range
maxValue)); // upper plot range
Notes:
- Note that cells with JSparklines with multiple values are NOT editable, so please set columns using JSparklines non-editable.
- Note that the chart type, the maximum and minimum values, the line width for line charts etc can be change later by using the methods setPlotType(…), setMaxValue(…), setMinValue(…), setLineWidth(…), etc, methods in JSparklinesTableCellRenderer.
- Note To change the plotting type simply change the JSparklinesTableCellRenderer.PlotType value.
Multiple Data Series
Displaying more than one data series is also very simple with JSparklines. Simply add multiple JSparklineDataSeries to the JSparklineDataset:
// add the data points for the first data series
ArrayList<Double> dataA = new ArrayList<Double>();
dataA.add(new Double(2.4));
dataA.add(new Double(4.1));
...
dataA.add(new Double(1.3));
// create a JSparklineDataSeries
JSparklinesDataSeries sparklineDataseriesA = new JSparklinesDataSeries(dataA, Color.RED, "Dataset A");
// add the data points for the second data series
ArrayList<Double> dataB = new ArrayList<Double>();
dataB.add(new Double(2.4));
dataB.add(new Double(4.1));
...
dataB.add(new Double(1.3));
// create a JSparklineDataSeries
JSparklinesDataSeries sparklineDataseriesB = new JSparklinesDataSeries(dataB, Color.BLUE, "Dataset B");
// add the data series to JSparklineDataset
ArrayList<JSparklinesDataSeries> sparkLineDataSeriesAll = new ArrayList<JSparklinesDataSeries>();
sparkLineDataSeriesAll.add(sparklineDataseriesA);
sparkLineDataSeriesAll.add(sparklineDataseriesB);
JSparklinesDataset dataset = new JSparklinesDataset(sparkLineDataSeriesAll);
// add the data to the table
((DefaultTableModel) multipleDataSeriesJTable.getModel()).addRow(new Object[]{"Protein " + (j + 1), dataset});
// set the JSparklines renderer
multipleDataSeriesJTable.getColumn("Change").setCellRenderer(
new JSparklinesTableCellRenderer(
JSparklinesTableCellRenderer.PlotType.barChart, // plot type
PlotOrientation.VERTICAL, // plot orientation
0.0, // lower plot range
maxValue)); // upper plot range
Notes:
- Note that cells with JSparklines with multiple values are NOT editable, so please set columns using JSparklines non-editable.
- Note that the chart type, the maximum and minimum values, the line width for line charts etc can be change later by using the methods setPlotType(…), setMaxValue(…), setMinValue(…), setLineWidth(…), etc, in JSparklinesTableCellRenderer.
2D and 3D Data Series
When plotting 2D or 3D data use the JSparklines3dTableCellRenderer instead of the standard JSparklinesTableCellRenderer, and the JSparklines3dDataset instead of the JSparklinesDataset.
// add the 2D/3D data points to display to an arraylist
ArrayList<XYZDataPoint> dataA = new ArrayList<XYZDataPoint>();
dataA.add(new XYZDataPoint(2.4, 3.4, 2.7));
dataA.add(new XYZDataPoint(5.8, 2.7, 8.2));
...
dataA.add(new XYZDataPoint(6.2, 6.3, 1.1));
// create a JSparkline3dDataSeries
JSparklines3dDataSeries sparkline3dDataseriesA = new JSparklines3dDataSeries(
dataA, Color.DARK_GRAY, "Dataset A");
// add the data series to JSparkline3dDataset
ArrayList<JSparklines3dDataSeries> sparkLine3dDataSeriesAll = new ArrayList<JSparklines3dDataSeries>();
sparkLine3dDataSeriesAll.add(sparkline3dDataseriesA);
JSparklines3dDataset dataset = new JSparklines3dDataset(sparkLine3dDataSeriesAll);
// add the data to the table
((DefaultTableModel) 3dValuesJTable.getModel()).addRow(new Object[]{"Protein " + (j + 1), dataset});
// set the JSparklines 3D renderer
3dValuesJTable.getColumn("Spread").setCellRenderer(new JSparklines3dTableCellRenderer(
JSparklines3dTableCellRenderer.PlotType.bubblePlot, // plot type
-10d, // x lower
100d, // x upper
-10d, // y lower
110d)); // y upper
Notes:
- Note that cells with JSparklines with 2D/3D values are NOT editable, so please set columns using JSparklines non-editable.
- Note that the chart type, the maximum and minimum values, etc can be change later by using the methods setPlotType(…), setMaxXValue(…), setMinXValue(…), etc, in JSparklines3dTableCellRenderer.
Reference Lines and Areas
Often it can be helpful to add reference lines or areas to the charts to make them easier to compare. In JSparklines this is very easy:
// get the JSparklines cell renderer
JSparklinesTableCellRenderer tempRenderer = ((JSparklinesTableCellRenderer) multipleValuesJTable.getColumn(
"My Column").getCellRenderer());
// add the reference
tempRenderer.addReferenceArea(
"My Reference", // the reference label
4, // the start value
6, // the end value
Color.LIGHT_GRAY, // the color to use
0.5f); // the alpha level
// repaint the chart
myJTable.revalidate();
myJTable.repaint();
Removing the reference is equally straightforward:
// get the JSparklines cell renderer
JSparklinesTableCellRenderer tempRenderer = ((JSparklinesTableCellRenderer) multipleValuesJTable.getColumn(
"My Column").getCellRenderer());
// remove the reference
tempRenderer.removeReferenceArea("My Reference");
To add a line reference instead if an area reference, simply use the addReferenceLine(…) method instead.
Note: For 2D/3D plots use addXAxisReferenceLine(…), removeXAxisReferenceLine(…), etc, to add or remove reference lines and areas.
Heat Maps
There are two ways to create heat maps using JSparklines, either by using the JSparklinesBarChartTableCellRenderer and use the showAsHeatMap method, or by using the JSparklinesBubbleHeatMapTableCellRenderer. In both cases the numbers are added to the Java table as normal, and the renderer is then used for all columns in the table.
Various color gradient options are available.
Heat map using JSparklinesBarChartTableCellRenderer:
for (int i = 0; i < heatmapJTable.getColumnCount(); i++) {
heatmapJTable.getColumn(
heatmapJTable.getColumnName(i)).setCellRenderer(
new JSparklinesBarChartTableCellRenderer(
PlotOrientation.HORIZONTAL,
-100d, 100d));
((JSparklinesBarChartTableCellRenderer) heatmapJTable.getColumn(
heatmapJTable.getColumnName(i)).getCellRenderer()).showAsHeatMap(
ColorGradient.RedBlackGreen);
}
Heat map using JSparklinesBubbleHeatMapTableCellRenderer:
for (int i = 0; i < heatmapJTable.getColumnCount(); i++) {
heatmapJTable.getColumn(
heatmapJTable.getColumnName(i)).setCellRenderer(
new JSparklinesBubbleHeatMapTableCellRenderer(
100d, ColorGradient.RedBlackGreen));
}
Setting the background color for the heat maps:
Black:
heatmapJTable.setGridColor(Color.BLACK);
heatmapJTable.setBackground(Color.BLACK);
heatmapJTable.setOpaque(true);
heatmapJTable.setForeground(Color.WHITE);
White:
heatmapJTable.setGridColor(Color.WHITE);
heatmapJTable.setBackground(Color.WHITE);
heatmapJTable.setOpaque(true);
heatmapJTable.setForeground(Color.BLACK);
Change the color gradient:
for (int i = 0; i < heatmapJTable.getColumnCount(); i++) {
((JSparklinesBarChartTableCellRenderer) heatmapJTable.getColumn(
heatmapJTable.getColumnName(i)).getCellRenderer()).
setGradientColoring(colorGradient);
}
Same for the JSparklinesBubbleHeatMapTableCellRenderer.
For a complete demo of how to use the heat maps see the JSparklinesHeatMapDemo
class in the no.uib.jsparklines
package.
Maven Dependency
JSparklines is available for use in Maven projects:
<dependency>
<groupId>no.uib</groupId>
<artifactId>jsparklines</artifactId>
<version>X.Y.Z</version>
</dependency>
<repository>
<id>genesis-maven2-repository</id>
<name>Genesis maven2 repository</name>
<url>https://genesis.UGent.be/maven2</url>
</repository>
Update the version number to latest released version.