Code: Select all
private JFreeChart buildCallMessageChart(XYDataset dataset1, XYDataset dataset2)
{
JFreeChart localJFreeChart = ChartFactory.createTimeSeriesChart(null, "Date", "Duration of Calls (mins)", dataset1, false, false, false);
XYPlot localXYPlot = (XYPlot)localJFreeChart.getPlot();
// create right range axis
NumberAxis numberCallSmsNumberAxis = new NumberAxis("# of Calls/SMS");
numberCallSmsNumberAxis.setLabelAngle(Math.PI);
// add into plot
localXYPlot.setRangeAxis(1, numberCallSmsNumberAxis);
localXYPlot.setDataset(1, dataset2);
localXYPlot.mapDatasetToRangeAxis(1, 1);
final XYLineAndShapeRenderer leftXYLineAndShapeRenderer = (XYLineAndShapeRenderer)localXYPlot.getRenderer();
final XYLineAndShapeRenderer rightXYLineAndShapeRenderer = new XYLineAndShapeRenderer();
localXYPlot.setRenderer(1, rightXYLineAndShapeRenderer);
final LegendTitle leftLegendTitle = new LegendTitle(leftXYLineAndShapeRenderer);
final LegendTitle rightLegendTitle = new LegendTitle(rightXYLineAndShapeRenderer);
final BlockContainer localBlockContainer = new BlockContainer(new BorderArrangement());
localBlockContainer.add(leftLegendTitle, RectangleEdge.LEFT);
localBlockContainer.add(rightLegendTitle, RectangleEdge.RIGHT);
//localBlockContainer.add(new EmptyBlock(2000.0D, 0D));
final CompositeTitle localCompositeTitle = new CompositeTitle(localBlockContainer);
localCompositeTitle.setPosition(RectangleEdge.BOTTOM);
localJFreeChart.addSubtitle(localCompositeTitle);
ChartFactory.getChartTheme().apply(localJFreeChart);
// change left XYLineAndShapeRenderer
leftXYLineAndShapeRenderer.setBaseShapesVisible(true);
// change domain axis
final DateAxis dateAxis = (DateAxis)localXYPlot.getDomainAxis();
dateAxis.setTickUnit(new DateTickUnit(DateTickUnitType.MONTH, 1, new SimpleDateFormat("MMM-yyyy")));
dateAxis.setVerticalTickLabels(true);
// change plot
localXYPlot.setBackgroundPaint(Color.white);
localXYPlot.setRangeGridlineStroke(new BasicStroke(1.0F));
localXYPlot.setRangeGridlinePaint(Color.black);
localXYPlot.setDomainGridlinesVisible(false);
// change life range axis
final NumberAxis valueAxis = (NumberAxis)localXYPlot.getRangeAxis(0);
valueAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
valueAxis.setAutoRangeIncludesZero(true);
return localJFreeChart;
}
How do I pad some space on time line like the following chart?