I used this test program with JFreeChart 1.0.6 and got what I think is the correct result ("2:00" appears twice on the axis, if you stretch the chart to make it wide enough). This is after I set my system locale to Europe/Berlin. Does it work for you?
Code: Select all
/* -----------------
* DateAxisTest.java
* -----------------
* (C) Copyright 2007, by Object Refinery Limited.
*
* Original Author: David Gilbert (for Object Refinery Limited);
*
*/
import java.awt.Color;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.Hour;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
public class DateAxisTest extends ApplicationFrame {
public DateAxisTest(String title) {
super(title);
ChartPanel chartPanel = (ChartPanel) createDemoPanel();
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
chartPanel.setMouseZoomable(true, false);
setContentPane(chartPanel);
}
private static JFreeChart createChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Test", // title
"Date", // x-axis label
"Price Per Unit", // y-axis label
dataset, // data
true, // create legend?
true, // generate tooltips?
false // generate URLs?
);
chart.setBackgroundPaint(Color.white);
XYPlot plot = (XYPlot) chart.getPlot();
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);
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setBaseShapesVisible(true);
renderer.setBaseShapesFilled(true);
return chart;
}
/**
* Creates a dataset, consisting of two series of monthly data.
*
* @return The dataset.
*/
private static XYDataset createDataset() {
TimeSeries s1 = new TimeSeries("Hourly Data", Hour.class);
s1.add(new Hour(23, 27, 10, 2007), 181.8);
s1.add(new Hour(0, 28, 10, 2007), 181.8);
s1.add(new Hour(1, 28, 10, 2007), 181.8);
s1.add(new Hour(2, 28, 10, 2007), 181.8);
s1.add(new Hour(3, 28, 10, 2007), 181.8);
s1.add(new Hour(4, 28, 10, 2007), 181.8);
s1.add(new Hour(5, 28, 10, 2007), 181.8);
s1.add(new Hour(6, 28, 10, 2007), 181.8);
s1.add(new Hour(7, 28, 10, 2007), 181.8);
s1.add(new Hour(8, 28, 10, 2007), 181.8);
s1.add(new Hour(9, 28, 10, 2007), 181.8);
s1.add(new Hour(10, 28, 10, 2007), 181.8);
s1.add(new Hour(11, 28, 10, 2007), 181.8);
s1.add(new Hour(12, 28, 10, 2007), 181.8);
s1.add(new Hour(13, 28, 10, 2007), 181.8);
s1.add(new Hour(14, 28, 10, 2007), 181.8);
s1.add(new Hour(15, 28, 10, 2007), 181.8);
s1.add(new Hour(16, 28, 10, 2007), 181.8);
s1.add(new Hour(17, 28, 10, 2007), 181.8);
s1.add(new Hour(18, 28, 10, 2007), 181.8);
s1.add(new Hour(19, 28, 10, 2007), 181.8);
s1.add(new Hour(20, 28, 10, 2007), 181.8);
s1.add(new Hour(21, 28, 10, 2007), 181.8);
s1.add(new Hour(22, 28, 10, 2007), 181.8);
s1.add(new Hour(23, 28, 10, 2007), 181.8);
s1.add(new Hour(0, 29, 10, 2007), 181.8);
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(s1);
return dataset;
}
public static JPanel createDemoPanel() {
JFreeChart chart = createChart(createDataset());
ChartPanel panel = new ChartPanel(chart);
panel.setMaximumDrawHeight(8000);
panel.setMaximumDrawWidth(8000);
return panel;
}
public static void main(String[] args) {
DateAxisTest demo = new DateAxisTest(
"DateAxis Test");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}