在JFreeChart甘特图中更改x轴的单位

我是JFreeChart的初学者。 我想将此图表的x轴值更改为毫秒,间隔为5毫秒。 我试过了

 axis.setTickUnit(new DateTickUnit(DateTickUnitType.MILLISECOND, 5)); 

但我一直有编译错误。 我在网上找到了somme建议,但没有任何对我有用。 还有,有没有办法设置x轴的最大值,如300毫秒。

 import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.DateTickUnit; import org.jfree.chart.axis.DateTickUnitType; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.Plot; import org.jfree.chart.plot.XYPlot; import org.jfree.data.category.IntervalCategoryDataset; import org.jfree.data.gantt.GanttCategoryDataset; import org.jfree.data.gantt.Task; import org.jfree.data.gantt.TaskSeries; import org.jfree.data.gantt.TaskSeriesCollection; import org.jfree.data.time.SimpleTimePeriod; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; public class Gantt extends ApplicationFrame { private static final long serialVersionUID = 1L; public Gantt(final String title) { super(title); final GanttCategoryDataset dataset = createDataset(); final JFreeChart chart = createChart(dataset); // add the chart to a panel... final ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); setContentPane(chartPanel); } public static GanttCategoryDataset createDataset() { final TaskSeries s1 = new TaskSeries("P0"); final Task t4 = new Task("P0", new SimpleTimePeriod(5, 50)); final Task st41 = new Task("1", new SimpleTimePeriod(5, 10)); // st41.setPercentComplete(1.0); final Task st42 = new Task("2", new SimpleTimePeriod(20, 30)); final Task st43 = new Task("3", new SimpleTimePeriod(40, 50)); t4.addSubtask(st41); t4.addSubtask(st42); t4.addSubtask(st43); s1.add(t4); final TaskSeries s2 = new TaskSeries("P1"); final Task t2 = new Task("P", new SimpleTimePeriod(0, 10)); final Task st21 = new Task("11", new SimpleTimePeriod(5, 10)); final Task st22 = new Task("21", new SimpleTimePeriod(20, 30)); final Task st23 = new Task("31", new SimpleTimePeriod(35, 90)); t2.addSubtask(st21); t2.addSubtask(st22); t2.addSubtask(st23); s2.add(t2); final TaskSeriesCollection collection = new TaskSeriesCollection(); collection.add(s1); collection.add(s2); return collection; } /* private static Date date(final int day, final int month, final int year) { final Calendar calendar = Calendar.getInstance(); calendar.set(year, month, day); final Date result = calendar.getTime(); return result; */ private JFreeChart createChart(final GanttCategoryDataset dataset) { final JFreeChart chart = ChartFactory.createGanttChart( "Gantt ", // chart title "PRO", // domain axis label "TIME", // range axis label dataset, // data true, // include legend true, // tooltips false // urls ); CategoryPlot plot = chart.getCategoryPlot(); DateAxis axis = (DateAxis) plot.getRangeAxis(); //axis.setTickUnit(new DateTickUnit(DateTickUnitType.MILLISECOND, 10)); axis.setDateFormatOverride(new SimpleDateFormat("S")); return chart; } public static void main(final String[] args) { final Gantt demo = new Gantt("Gantt"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } } 

一些可能的考虑因素:

  • 创建图表时,在相应的轴标签中指定单位。

     "TIME (ms)", // range axis label 
  • 使用setDateFormatOverride()更改轴标签的格式,例如三位数值。

     DateAxis axis = (DateAxis) plot.getRangeAxis(); axis.setDateFormatOverride(new SimpleDateFormat("SSS")); 
  • 如果有保证,请使用setMaximumDate()

     axis.setMaximumDate(new Date(300)); 

图片