I have a DateAxis as my DomainAxis for my XYPlot and need to align certain days with bars from my XYBarRenderer. The Bars are vertical. I am using the setTickMarkPosition method and it is not changing anything.
Here is my code:
Code: Select all
/* *********************************************************************
*
* MODULE: Win.java
*
* REVISION HISTORY:
* Original version.
*/
package xyintdemo;
import java.awt.*;
import java.awt.geom.Point2D;
import java.lang.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.xy.*;
import org.jfree.data.Range;
import org.jfree.data.category.*;
import org.jfree.data.time.*;
import org.jfree.data.xy.*;
/**
* This is the Win implementation.
*
* @since 0.2.0
*/
public class Win
extends JFrame
{
/**
* Win constructor.
*/
public Win()
{
super("Main Window");
initComponents();
initWin();
}
protected void initComponents()
{
Container mcp = this.getContentPane();
mcp.setLayout(new BorderLayout());
NumberTickUnit tickUnit = new NumberTickUnit(1.0/3.0);
XYBarDataset barDS = new XYBarDataset(createBarDataset(), 1.0);
NumberAxis rangeAxis = new NumberAxis();
DateAxis domainAxis = new DateAxis("Days");
XYBarRenderer bRenderer = new XYBarRenderer(.20);
rangeAxis.setTickUnit(tickUnit);
rangeAxis.setLowerBound(0.0);
rangeAxis.setUpperBound(1);
domainAxis.setRange(0.0,5.0);
domainAxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
XYPlot plot = new XYPlot(barDS,domainAxis,rangeAxis, bRenderer);
plot.setRangeAxisLocation(1,AxisLocation.TOP_OR_RIGHT);
XYItemRenderer peRenderer = new XYLineAndShapeRenderer();
XYSeriesCollection lineDS = (XYSeriesCollection) createDataset();
plot.setDataset(1,lineDS);
plot.setRenderer(1,peRenderer);
plot.setBackgroundPaint(Color.LIGHT_GRAY);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
JFreeChart chart = new JFreeChart(plot);
chart.setBackgroundPaint(Color.LIGHT_GRAY);
ChartPanel panel = new ChartPanel(chart);
mcp.add(panel, BorderLayout.CENTER);
}
private XYDataset createDataset(){
XYSeries series1 = new XYSeries("Assessed");
series1.add(0.63333333,0);
series1.add(1.6,0.1);
series1.add(2.66666667,0.2);
series1.add(3.56666667,0.75);
series1.add(4.6,0.9);
XYSeries series2 = new XYSeries("Planned");
series2.add(0.63333333,0);
series2.add(1.66666667,0.2);
series2.add(2.66666667,0.3);
series2.add(3.56666667,0.7);
series2.add(4.66666667,0.95);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
dataset.addSeries(series2);
return dataset;
}
private XYDataset createBarDataset(){
XYSeries s1 = new XYSeries("Bars/ATO/Days");
s1.add(1, 1);
s1.add(2, 1);
s1.add(3, 1);
s1.add(4, 1);
s1.add(5, 1);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(s1);
return dataset;
}
protected void initWin()
{
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
}