用JFreeChart绘制图表

时间:2014-12-27 13:54:05

标签: java eclipse swing jfreechart diagram

我正在使用Eclipse上的jFreeChart(在Windows中),我想为处理器绘制甘特图。
我在做一张XY图表

但是我的程序只画了一条P0线。我想要像

这样的东西
  • 从0到10绘制 - > P0
  • 然后从10到20 - >画H
  • 然后从20到30 ----> draw wait
  • 从30到40 --->画P0
  • 从35到40 - >绘制H

代码:

    import javax.swing.JFrame;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;

    public class JFreeChartLineChartExample extends JFrame {

    private static final long serialVersionUID = 1L;

    public JFreeChartLineChartExample(String applicationTitle, String chartTitle) {
    super(applicationTitle);

    // based on the dataset we create the chart
    JFreeChart pieChart = ChartFactory.createXYLineChart(chartTitle, "Time", "Processors",    
      createDataset(),PlotOrientation.VERTICAL, true, true, false);

    // Adding chart into a chart panel
    ChartPanel chartPanel = new ChartPanel(pieChart);

    // settind default size
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));

    // add to contentPane
    setContentPane(chartPanel);
    }

    private XYDataset createDataset() {

  final XYSeries P0 = new XYSeries("P0");
  P0.add(0, 1);
  P0.add(10, 1);

  P0.add(35, 1);
  P0.add(50, 1);
  P0.add(85, 1);
  P0.add(110, 1);


  final XYSeries P2 = new XYSeries("P2");



  final XYSeries P1 = new XYSeries("P1");



  final XYSeries H = new XYSeries("H");
  H.add(10, 1);
  H.add(20, 1);
  H.add(45, 1);
  H.add(100, 1);


  final XYSeries wait = new XYSeries("wait");
  wait.add(80, 1);
  wait.add(90, 1);
  wait.add(105, 1);



  final XYSeriesCollection dataset = new XYSeriesCollection();
  dataset.addSeries(P0);
  dataset.addSeries(P2);
  dataset.addSeries(P1);
  dataset.addSeries(H);
  dataset.addSeries(wait);

  return dataset;

       }

   public static void main(String[] args) {
  JFreeChartLineChartExample chart = new JFreeChartLineChartExample(" GANTT ", " GANTT");
  chart.pack();
  chart.setVisible(true);
     }
   }

1 个答案:

答案 0 :(得分:0)

据我了解,您希望数据集中存在差距。您的代码为数据集P0绘制了从时间0到110的直线,因为JFreeChart不知道您想要有间隙。

要添加差距,您需要将null值添加到数据集中。

例如,P0应按如下方式创建:

final XYSeries P0 = new XYSeries("P0");
P0.add(0, 1);
P0.add(10, 1);
P0.add(11, null);
P0.add(35, 1);
P0.add(50, 1);
P0.add(51, null);
P0.add(85, 1);
P0.add(110, 1);

您可能还会看一下JFreeChart提供的特殊甘特图类。 JFreeChart演示中有一些示例。