I have been able to reproduce the problem with the following code. Don't know (yet) what causes the problem...
Code: Select all
import java.awt.Color;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickMarkPosition;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class TestMonthlyChart extends ApplicationFrame {
/**
* Constructs the demo application.
*
* @param title the frame title.
*/
public TestMonthlyChart(String title) {
super(title);
IntervalXYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 300));
setContentPane(chartPanel);
}
private static JFreeChart createChart(IntervalXYDataset dataset) {
JFreeChart chart = ChartFactory.createXYBarChart(
"Random Weekly Data",
"Year",
true,
"Number of People",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
// then customise it a little...
chart.setBackgroundPaint(Color.white);
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setRangeGridlinePaint(Color.white);
XYItemRenderer renderer = plot.getRenderer();
renderer.setToolTipGenerator(new StandardXYToolTipGenerator("{1}. {2}", DateFormat.getInstance(), NumberFormat.getInstance()));
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setTickUnit(new DateTickUnit(DateTickUnit.YEAR, 1, new SimpleDateFormat("yyyy")));
axis.setTickMarkPosition(DateTickMarkPosition.END);
axis.setLowerMargin(0.01);
axis.setUpperMargin(0.01);
return chart;
}
private static IntervalXYDataset createDataset() {
TimeSeries t1 = new TimeSeries("Random Monthly Data", "Month", "Count", Month.class);
try {
t1.add(new Month(1, 2003), new Integer(9));
t1.add(new Month(2, 2003), new Integer(1));
t1.add(new Month(3, 2003), new Integer(7));
t1.add(new Month(4, 2003), new Integer(2));
t1.add(new Month(5, 2003), new Integer(3));
t1.add(new Month(6, 2003), new Integer(31));
t1.add(new Month(7, 2003), new Integer(2));
t1.add(new Month(8, 2003), new Integer(5));
t1.add(new Month(9, 2003), new Integer(21));
t1.add(new Month(10, 2003), new Integer(21));
t1.add(new Month(11, 2003), new Integer(21));
t1.add(new Month(12, 2003), new Integer(21));
t1.add(new Month(1, 2004), new Integer(9));
t1.add(new Month(2, 2004), new Integer(1));
t1.add(new Month(3, 2004), new Integer(7));
t1.add(new Month(4, 2004), new Integer(2));
t1.add(new Month(5, 2004), new Integer(3));
t1.add(new Month(6, 2004), new Integer(31));
t1.add(new Month(7, 2004), new Integer(2));
t1.add(new Month(8, 2004), new Integer(5));
t1.add(new Month(9, 2004), new Integer(21));
t1.add(new Month(10, 2004), new Integer(21));
t1.add(new Month(11, 2004), new Integer(21));
t1.add(new Month(12, 2004), new Integer(21));
t1.add(new Month(1, 2005), new Integer(9));
t1.add(new Month(2, 2005), new Integer(1));
t1.add(new Month(3, 2005), new Integer(7));
t1.add(new Month(4, 2005), new Integer(2));
t1.add(new Month(5, 2005), new Integer(3));
t1.add(new Month(6, 2005), new Integer(31));
t1.add(new Month(7, 2005), new Integer(2));
t1.add(new Month(8, 2005), new Integer(5));
t1.add(new Month(9, 2005), new Integer(21));
t1.add(new Month(10, 2005), new Integer(21));
t1.add(new Month(11, 2005), new Integer(21));
t1.add(new Month(12, 2005), new Integer(21));
}
catch (Exception e) {
System.err.println(e.getMessage());
}
TimeSeriesCollection tsc = new TimeSeriesCollection(t1, TimeZone.getTimeZone("America/New_York"));
tsc.setDomainIsPointsInTime(false);
return tsc;
}
/**
* Creates a panel for the demo.
*
* @return A panel.
*/
public static JPanel createDemoPanel() {
return new ChartPanel(createChart(createDataset()));
}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
TestMonthlyChart demo = new TestMonthlyChart("Random Monthly Data");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}