List of usage examples for org.jfree.chart.renderer.xy HighLowRenderer HighLowRenderer
public HighLowRenderer()
From source file:jgnash.ui.report.compiled.SecurityHighLowChart.java
private static JFreeChart createHighLowChart(String title, String timeAxisLabel, String valueAxisLabel, AbstractXYDataset data, boolean legend) { ValueAxis timeAxis = new DateAxis(timeAxisLabel); NumberAxis valueAxis = new NumberAxis(valueAxisLabel); valueAxis.setAutoRangeIncludesZero(false); HighLowRenderer renderer = new HighLowRenderer(); renderer.setBaseToolTipGenerator(new HighLowItemLabelGenerator()); XYPlot plot = new XYPlot(data, timeAxis, valueAxis, renderer); return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, legend); }
From source file:de.laures.cewolf.taglib.PlotTypes.java
/** * Create a renderer for the given type index. * We create a new renderer instance for each chart, because they may want to customize * it in a post-processor./*from w ww. j a v a 2 s .c om*/ * * @param idx The index of the type * @return A new renderer instance */ public static AbstractRenderer getRenderer(int idx) { switch (idx) { case 0: return new XYAreaRenderer(); case 1: return new StandardXYItemRenderer(); case 2: return new StandardXYItemRenderer(StandardXYItemRenderer.SHAPES_AND_LINES); case 3: return new StandardXYItemRenderer(StandardXYItemRenderer.SHAPES); case 4: return new XYBarRenderer(); case 5: return new XYStepRenderer(); case 6: return new CandlestickRenderer(); case 7: return new HighLowRenderer(); //case 8: return new SignalRenderer(); case 9: return new BarRenderer(); case 10: return new AreaRenderer(); case 11: return new LineAndShapeRenderer(true, false); case 12: return new LineAndShapeRenderer(true, true); default: throw new RuntimeException("Invalid renderer index:" + idx); } }
From source file:org.optaplanner.examples.cheaptime.swingui.CheapTimePanel.java
private XYPlot createTaskAssignmentPlot(TangoColorFactory tangoColorFactory, CheapTimeSolution solution) { OHLCSeriesCollection seriesCollection = new OHLCSeriesCollection(); Map<Machine, OHLCSeries> machineSeriesMap = new LinkedHashMap<Machine, OHLCSeries>( solution.getMachineList().size()); HighLowRenderer renderer = new HighLowRenderer(); renderer.setTickLength(0.0);//from w w w .jav a 2s . com int seriesIndex = 0; OHLCSeries unassignedProjectSeries = new OHLCSeries("Unassigned"); seriesCollection.addSeries(unassignedProjectSeries); machineSeriesMap.put(null, unassignedProjectSeries); renderer.setSeriesStroke(seriesIndex, new BasicStroke(3.0f)); renderer.setSeriesPaint(seriesIndex, TangoColorFactory.SCARLET_1); seriesIndex++; for (Machine machine : solution.getMachineList()) { OHLCSeries machineSeries = new OHLCSeries(machine.getLabel()); seriesCollection.addSeries(machineSeries); machineSeriesMap.put(machine, machineSeries); renderer.setSeriesStroke(seriesIndex, new BasicStroke(3.0f)); renderer.setSeriesPaint(seriesIndex, tangoColorFactory.pickColor(machine)); seriesIndex++; } List<TaskAssignment> taskAssignmentList = new ArrayList<TaskAssignment>(solution.getTaskAssignmentList()); Collections.sort(taskAssignmentList, groupByMachineCheckBox.isSelected() ? groupByMachineTaskAssignmentComparator : stableTaskAssignmentComparator); int pixelIndex = 0; for (TaskAssignment taskAssignment : taskAssignmentList) { Task task = taskAssignment.getTask(); Integer startPeriod = taskAssignment.getStartPeriod(); Integer endPeriod = taskAssignment.getEndPeriod(); if (startPeriod == null) { startPeriod = task.getStartPeriodRangeFrom(); endPeriod = startPeriod + task.getDuration(); } OHLCSeries machineSeries = machineSeriesMap.get(taskAssignment.getMachine()); machineSeries.add(new FixedMillisecond(pixelIndex), task.getStartPeriodRangeFrom(), startPeriod, endPeriod, task.getStartPeriodRangeTo() + task.getDuration()); pixelIndex++; } NumberAxis domainAxis = new NumberAxis("Task"); domainAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); domainAxis.setRange(-0.5, taskAssignmentList.size() - 0.5); domainAxis.setInverted(true); return new XYPlot(seriesCollection, domainAxis, null, renderer); }
From source file:net.commerce.zocalo.freechart.ChartGenerator.java
public static JFreeChart createOverlaidOHLCAndStepChart(TimePeriodValuesCollection bottom, TimePeriodValuesCollection top, OHLCDataset ohlCdata) { DateAxis xAxis = new DateAxis(null); NumberAxis yAxis = new NumberAxis("price"); yAxis.setStandardTickUnits(NumberAxis.createStandardTickUnits()); yAxis.setUpperBound(100);/*from ww w.j ava 2 s . c o m*/ yAxis.setLowerBound(0.0); XYPlot plot = new XYPlot(null, xAxis, yAxis, null); plot.setDataset(0, bottom); plot.setDataset(1, top); plot.setDataset(2, ohlCdata); XYStepAreaRenderer bottomRenderer = new XYStepAreaRenderer(XYStepAreaRenderer.AREA, null, null); XYStepAreaRenderer topRenderer = new XYStepAreaRenderer(XYStepAreaRenderer.AREA, null, null); HighLowRenderer hiLoRenderer = new HighLowRenderer(); topRenderer.setRangeBase(1.0); topRenderer.setSeriesPaint(0, new Color(204, 255, 153)); bottomRenderer.setSeriesPaint(0, new Color(51, 255, 204)); plot.setRenderer(bottomRenderer); plot.setRenderer(1, topRenderer); plot.setRenderer(2, hiLoRenderer); plot.setOrientation(PlotOrientation.VERTICAL); plot.setDomainCrosshairVisible(false); plot.setRangeCrosshairVisible(false); plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); return new JFreeChart(null, JFreeChart.DEFAULT_TITLE_FONT, plot, true); }
From source file:org.hxzon.demo.jfreechart.XYDatasetDemo2.java
private static JFreeChart createHighLowChart(XYDataset dataset) { ValueAxis timeAxis = new DateAxis(xAxisLabel); NumberAxis valueAxis = new NumberAxis(yAxisLabel); HighLowRenderer renderer = new HighLowRenderer(); renderer.setBaseToolTipGenerator(new HighLowItemLabelGenerator()); XYPlot plot = new XYPlot(dataset, timeAxis, valueAxis, renderer); JFreeChart chart = new JFreeChart("HighLow Chart Demo", JFreeChart.DEFAULT_TITLE_FONT, plot, legend); chart.setBackgroundPaint(Color.white); plot.setBackgroundPaint(Color.lightGray); plot.setDomainGridlinePaint(Color.white); plot.setRangeGridlinePaint(Color.white); plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); plot.setDomainCrosshairVisible(true); plot.setRangeCrosshairVisible(true); return chart; }
From source file:org.hxzon.demo.jfreechart.OtherDatasetDemo.java
private static JFreeChart createHighLowChart(OHLCDataset dataset) { ValueAxis timeAxis = new DateAxis(xAxisLabel); NumberAxis valueAxis = new NumberAxis(yAxisLabel); HighLowRenderer renderer = new HighLowRenderer(); renderer.setBaseToolTipGenerator(new HighLowItemLabelGenerator()); XYPlot plot = new XYPlot(dataset, timeAxis, valueAxis, renderer); JFreeChart chart = new JFreeChart("HighLow Chart Demo", JFreeChart.DEFAULT_TITLE_FONT, plot, legend); chart.setBackgroundPaint(Color.white); plot.setBackgroundPaint(Color.lightGray); plot.setDomainGridlinePaint(Color.white); plot.setRangeGridlinePaint(Color.white); plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); plot.setDomainCrosshairVisible(true); plot.setRangeCrosshairVisible(true); return chart; }
From source file:oscar.oscarEncounter.oscarMeasurements.pageUtil.MeasurementGraphAction2.java
JFreeChart actualLabChartRef(String demographicNo, String labType, String identifier, String testName,
String patientName, String chartTitle) {
org.jfree.data.time.TimeSeriesCollection dataset = new org.jfree.data.time.TimeSeriesCollection();
ArrayList<Map<String, Serializable>> list = CommonLabTestValues.findValuesForTest(labType, demographicNo,
testName, identifier);/* w ww .j av a 2s. c o m*/
String typeYAxisName = "";
ArrayList<OHLCDataItem> dataItems = new ArrayList<OHLCDataItem>();
String typeLegendName = "Lab Value";
typeYAxisName = "type Y";
boolean nameSet = false;
TimeSeries newSeries = new TimeSeries(typeLegendName, Day.class);
for (Map mdb : list) {
if (!nameSet) {
typeYAxisName = (String) mdb.get("units");
typeLegendName = (String) mdb.get("testName");
newSeries.setKey(typeLegendName);
nameSet = true;
}
newSeries.addOrUpdate(new Day((Date) mdb.get("collDateDate")),
Double.parseDouble("" + mdb.get("result")));
log.debug("RANGE " + mdb.get("range"));
if (mdb.get("range") != null) {
String range = (String) mdb.get("range");
if (range.indexOf("-") != -1) {
String[] sp = range.split("-");
double open = Double.parseDouble(sp[0]);
double high = Double.parseDouble(sp[1]);
double low = Double.parseDouble(sp[0]);
double close = Double.parseDouble(sp[1]);
double volume = 1045;
dataItems.add(new OHLCDataItem(new Day((Date) mdb.get("collDateDate")).getStart(), open, high,
low, close, volume));
}
}
}
dataset.addSeries(newSeries);
JFreeChart chart = ChartFactory.createTimeSeriesChart(chartTitle, "Days", typeYAxisName, dataset, true,
true, true);
XYPlot plot = chart.getXYPlot();
plot.getDomainAxis().setAutoRange(true);
log.debug("LEN " + plot.getDomainAxis().getLowerBound() + " ddd " + plot.getDomainAxis().getUpperMargin()
+ " eee " + plot.getDomainAxis().getLowerMargin());
plot.getDomainAxis().setUpperMargin(plot.getDomainAxis().getUpperMargin() * 6);
plot.getDomainAxis().setLowerMargin(plot.getDomainAxis().getLowerMargin() * 6);
plot.getRangeAxis().setUpperMargin(plot.getRangeAxis().getUpperMargin() * 1.7);
plot.getDomainAxis().setUpperMargin(0.9);
plot.getDomainAxis().setLowerMargin(0.9);
plot.getRangeAxis().setUpperMargin(plot.getRangeAxis().getUpperMargin() * 4);
ValueAxis va = plot.getRangeAxis();
va.setAutoRange(true);
XYItemRenderer renderer = plot.getRenderer(); //DateFormat.getInstance()
XYItemLabelGenerator generator = new StandardXYItemLabelGenerator("{1} \n {2}",
new SimpleDateFormat("yyyy.MM.dd"), new DecimalFormat("0.00"));
renderer.setSeriesItemLabelGenerator(0, generator);//setLabelGenerator(generator);
renderer.setBaseItemLabelsVisible(true);
plot.setBackgroundPaint(Color.WHITE);
plot.setDomainCrosshairPaint(Color.GRAY);
if (renderer instanceof XYLineAndShapeRenderer) {
XYLineAndShapeRenderer rend = (XYLineAndShapeRenderer) renderer;
rend.setBaseShapesVisible(true);
rend.setBaseShapesFilled(true);
}
plot.setRenderer(renderer);
if (dataItems != null && dataItems.size() > 0) {
OHLCDataItem[] ohlc = dataItems.toArray(new OHLCDataItem[dataItems.size()]);
XYDataset referenceRangeDataset = new DefaultOHLCDataset("Normal Reference Range", ohlc);
plot.setDataset(1, referenceRangeDataset);
plot.mapDatasetToRangeAxis(1, 0);
plot.setRenderer(1, new HighLowRenderer());
}
return chart;
}
From source file:oscar.oscarEncounter.oscarMeasurements.pageUtil.MeasurementGraphAction2.java
JFreeChart actualLabChartRefPlusMeds(String demographicNo, String labType, String identifier, String testName,
String patientName, String chartTitle, String[] drugs) {
org.jfree.data.time.TimeSeriesCollection dataset = new org.jfree.data.time.TimeSeriesCollection();
ArrayList<Map<String, Serializable>> list = null;
MiscUtils.getLogger().debug(/*from ww w .j av a 2s . co m*/
" lab type >" + labType + "< >" + labType.equals("loinc") + "<" + testName + " " + identifier);
if (labType.equals("loinc")) {
try {
Connection conn = DbConnectionFilter.getThreadLocalDbConnection();
list = CommonLabTestValues.findValuesByLoinc2(demographicNo, identifier, conn);
MiscUtils.getLogger().debug("List ->" + list.size());
conn.close();
} catch (Exception ed) {
MiscUtils.getLogger().error("Error", ed);
}
} else {
list = CommonLabTestValues.findValuesForTest(labType, demographicNo, testName, identifier);
}
String typeYAxisName = "";
ArrayList<OHLCDataItem> dataItems = new ArrayList<OHLCDataItem>();
String typeLegendName = "Lab Value";
typeYAxisName = "type Y";
boolean nameSet = false;
TimeSeries newSeries = new TimeSeries(typeLegendName, Day.class);
for (Map mdb : list) {
if (!nameSet) {
typeYAxisName = (String) mdb.get("units");
typeLegendName = (String) mdb.get("testName");
if (typeLegendName == null) {
typeLegendName = testName;
}
newSeries.setKey(typeLegendName);
nameSet = true;
}
newSeries.addOrUpdate(new Day((Date) mdb.get("collDateDate")),
Double.parseDouble("" + mdb.get("result")));
log.debug("RANGE " + mdb.get("range"));
if (mdb.get("range") != null) {
String range = (String) mdb.get("range");
if (range.indexOf("-") != -1) {
String[] sp = range.split("-");
double open = Double.parseDouble(sp[0]);
double high = Double.parseDouble(sp[1]);
double low = Double.parseDouble(sp[0]);
double close = Double.parseDouble(sp[1]);
double volume = 1045;
dataItems.add(new OHLCDataItem(new Day((Date) mdb.get("collDateDate")).getStart(), open, high,
low, close, volume));
}
}
}
dataset.addSeries(newSeries);
JFreeChart chart = ChartFactory.createTimeSeriesChart(chartTitle, "Days", typeYAxisName, dataset, true,
true, true);
XYPlot plot = chart.getXYPlot();
plot.getDomainAxis().setAutoRange(true);
log.debug("LEN " + plot.getDomainAxis().getLowerBound() + " ddd " + plot.getDomainAxis().getUpperMargin()
+ " eee " + plot.getDomainAxis().getLowerMargin());
plot.getDomainAxis().setUpperMargin(plot.getDomainAxis().getUpperMargin() * 6);
plot.getDomainAxis().setLowerMargin(plot.getDomainAxis().getLowerMargin() * 6);
plot.getRangeAxis().setUpperMargin(plot.getRangeAxis().getUpperMargin() * 1.7);
plot.getDomainAxis().setUpperMargin(0.9);
plot.getDomainAxis().setLowerMargin(0.9);
plot.getRangeAxis().setUpperMargin(plot.getRangeAxis().getUpperMargin() * 4);
ValueAxis va = plot.getRangeAxis();
va.setAutoRange(true);
XYItemRenderer renderer = plot.getRenderer(); //DateFormat.getInstance()
XYItemLabelGenerator generator = new StandardXYItemLabelGenerator("{1} \n {2}",
new SimpleDateFormat("yyyy.MM.dd"), new DecimalFormat("0.00"));
renderer.setSeriesItemLabelGenerator(0, generator);//setLabelGenerator(generator);
renderer.setBaseItemLabelsVisible(true);
plot.setBackgroundPaint(Color.WHITE);
plot.setDomainCrosshairPaint(Color.GRAY);
if (renderer instanceof XYLineAndShapeRenderer) {
XYLineAndShapeRenderer rend = (XYLineAndShapeRenderer) renderer;
rend.setBaseShapesVisible(true);
rend.setBaseShapesFilled(true);
}
plot.setRenderer(renderer);
if (dataItems != null && dataItems.size() > 0) {
OHLCDataItem[] ohlc = dataItems.toArray(new OHLCDataItem[dataItems.size()]);
XYDataset referenceRangeDataset = new DefaultOHLCDataset("Normal Reference Range", ohlc);
plot.setDataset(1, referenceRangeDataset);
plot.mapDatasetToRangeAxis(1, 0);
plot.setRenderer(1, new HighLowRenderer());
}
XYTaskDataset drugDataset = getDrugDataSet(demographicNo, drugs);
//DateAxis xAxis = new DateAxis("Date/Time");
//DateAxis xAxis = plot.getRangeAxis();
SymbolAxis yAxis = new SymbolAxis("Meds", getDrugSymbol(demographicNo, drugs));
yAxis.setGridBandsVisible(false);
XYBarRenderer xyrenderer = new XYBarRenderer();
xyrenderer.setUseYInterval(true);
xyrenderer.setBarPainter(new StandardXYBarPainter());
//XYPlot xyplot = new XYPlot(drugDataset, xAxis, yAxis, xyrenderer);
XYPlot xyplot = new XYPlot(drugDataset, plot.getDomainAxis(), yAxis, xyrenderer);
xyplot.getDomainAxis().setUpperMargin(0.9);
xyplot.getDomainAxis().setLowerMargin(0.9);
CombinedDomainXYPlot cplot = new CombinedDomainXYPlot(new DateAxis("Date/Time"));
cplot.add(plot);
cplot.add(xyplot);
///////
chart = new JFreeChart(chartTitle, cplot);
chart.setBackgroundPaint(Color.white);
return chart;
}
From source file:oscar.oscarEncounter.oscarMeasurements.pageUtil.MeasurementGraphAction2.java
JFreeChart labChartRef(String demographicNo, String typeIdName, String typeIdName2, String patientName,
String chartTitle) {/*from ww w . j ava2 s. com*/
org.jfree.data.time.TimeSeriesCollection dataset = new org.jfree.data.time.TimeSeriesCollection();
ArrayList<EctMeasurementsDataBean> list = getList(demographicNo, typeIdName);
String typeYAxisName = "";
ArrayList<OHLCDataItem> dataItems = new ArrayList<OHLCDataItem>();
if (typeIdName.equals("BP")) {
log.debug("Using BP LOGIC FOR type 1 ");
EctMeasurementsDataBean sampleLine = list.get(0);
typeYAxisName = sampleLine.getTypeDescription();
TimeSeries systolic = new TimeSeries("Systolic", Day.class);
TimeSeries diastolic = new TimeSeries("Diastolic", Day.class);
for (EctMeasurementsDataBean mdb : list) { // dataVector) {
String[] str = mdb.getDataField().split("/");
systolic.addOrUpdate(new Day(mdb.getDateObservedAsDate()), Double.parseDouble(str[0]));
diastolic.addOrUpdate(new Day(mdb.getDateObservedAsDate()), Double.parseDouble(str[1]));
}
dataset.addSeries(diastolic);
dataset.addSeries(systolic);
} else {
log.debug("Not Using BP LOGIC FOR type 1 ");
// get the name from the TimeSeries
EctMeasurementsDataBean sampleLine = list.get(0);
String typeLegendName = sampleLine.getTypeDisplayName();
typeYAxisName = sampleLine.getTypeDescription(); // this should be the type of measurement
TimeSeries newSeries = new TimeSeries(typeLegendName, Day.class);
for (EctMeasurementsDataBean mdb : list) { //dataVector) {
newSeries.addOrUpdate(new Day(mdb.getDateObservedAsDate()), Double.parseDouble(mdb.getDataField()));
try {
Hashtable h = getMeasurementsExt(mdb.getId());
if (h != null && h.containsKey("minimum")) {
String min = (String) h.get("minimum");
String max = (String) h.get("maximum");
double open = Double.parseDouble(min.trim());
double high = Double.parseDouble(max.trim());
double low = Double.parseDouble(min.trim());
double close = Double.parseDouble(max.trim());
double volume = 1045;
dataItems
.add(new OHLCDataItem(mdb.getDateObservedAsDate(), open, high, low, close, volume));
}
} catch (Exception et) {
MiscUtils.getLogger().error("Error", et);
}
}
dataset.addSeries(newSeries);
}
JFreeChart chart = ChartFactory.createTimeSeriesChart(chartTitle, "Days", typeYAxisName, dataset, true,
true, true);
XYPlot plot = chart.getXYPlot();
plot.getDomainAxis().setAutoRange(true);
log.debug("LEN " + plot.getDomainAxis().getLowerBound() + " ddd " + plot.getDomainAxis().getUpperMargin()
+ " eee " + plot.getDomainAxis().getLowerMargin());
plot.getDomainAxis().setUpperMargin(plot.getDomainAxis().getUpperMargin() * 6);
plot.getDomainAxis().setLowerMargin(plot.getDomainAxis().getLowerMargin() * 6);
plot.getRangeAxis().setUpperMargin(plot.getRangeAxis().getUpperMargin() * 1.7);
plot.getDomainAxis().setUpperMargin(0.9);
plot.getDomainAxis().setLowerMargin(0.9);
plot.getRangeAxis().setUpperMargin(plot.getRangeAxis().getUpperMargin() * 4);
ValueAxis va = plot.getRangeAxis();
va.setAutoRange(true);
XYItemRenderer renderer = plot.getRenderer(); //DateFormat.getInstance()
XYItemLabelGenerator generator = new StandardXYItemLabelGenerator("{1} \n {2}",
new SimpleDateFormat("yyyy.MM.dd"), new DecimalFormat("0.00"));
renderer.setSeriesItemLabelGenerator(0, generator);//setLabelGenerator(generator);
renderer.setBaseItemLabelsVisible(true);
plot.setBackgroundPaint(Color.WHITE);
plot.setDomainCrosshairPaint(Color.GRAY);
if (renderer instanceof XYLineAndShapeRenderer) {
XYLineAndShapeRenderer rend = (XYLineAndShapeRenderer) renderer;
rend.setBaseShapesVisible(true);
rend.setBaseShapesFilled(true);
}
plot.setRenderer(renderer);
if (dataItems != null && dataItems.size() > 0) {
OHLCDataItem[] ohlc = dataItems.toArray(new OHLCDataItem[dataItems.size()]);
XYDataset referenceRangeDataset = new DefaultOHLCDataset("Reference Range", ohlc);
plot.setRenderer(1, setAxisAndDataSet(1, plot, plot.getRangeAxis(), referenceRangeDataset, Color.GREEN,
new HighLowRenderer()));
}
/////
return chart;
}
From source file:org.jfree.chart.demo.JFreeChartDemoBase.java
/** * Creates and returns a sample overlaid chart. * <P>//from w w w . j a va 2 s . c o m * Note: with the introduction of multiple secondary datasets in JFreeChart version 0.9.10, * the overlaid chart facility has been removed. You can achieve the same results using * a regular XYPlot with multiple datasets. * * @return an overlaid chart. */ public JFreeChart createOverlaidChart() { // create a default chart based on some sample data... final String title = this.resources.getString("combined.overlaid.title"); final String subtitleStr = this.resources.getString("combined.overlaid.subtitle"); final String domainAxisLabel = this.resources.getString("combined.overlaid.domain"); final String rangeAxisLabel = this.resources.getString("combined.overlaid.range"); // create high-low and moving average dataset final DefaultHighLowDataset highLowData = DemoDatasetFactory.createHighLowDataset(); // make an overlaid plot final ValueAxis domainAxis = new DateAxis(domainAxisLabel); final NumberAxis rangeAxis = new NumberAxis(rangeAxisLabel); rangeAxis.setAutoRangeIncludesZero(false); final XYItemRenderer renderer1 = new HighLowRenderer(); renderer1.setToolTipGenerator(new HighLowItemLabelGenerator()); final XYPlot plot = new XYPlot(highLowData, domainAxis, rangeAxis, renderer1); // overlay a moving average dataset final XYDataset maData = MovingAverage.createMovingAverage(highLowData, " (Moving Average)", 5 * 24 * 60 * 60 * 1000L, 5 * 24 * 60 * 60 * 1000L); plot.setDataset(1, maData); final XYItemRenderer renderer2 = new StandardXYItemRenderer(); renderer2.setToolTipGenerator( new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT, new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0,000.0"))); plot.setRenderer(1, renderer2); // make the top level JFreeChart object final JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, true); // then customise it a little... final TextTitle subtitle = new TextTitle(subtitleStr, new Font("SansSerif", Font.BOLD, 12)); chart.addSubtitle(subtitle); chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000, Color.blue)); return chart; }