Using a DateAxis with A XYBarRenderer

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
MattBallard
Posts: 29
Joined: Wed Jun 06, 2007 7:41 pm

Using a DateAxis with A XYBarRenderer

Post by MattBallard » Mon Oct 22, 2007 5:52 pm

Is there a way to align the tick marks in the middle of the Bars?

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);
    }
}

Locked