- Home ›
- JFreeChartを使ったグラフ作成 ›
- ガントチャート(GanttChart) ›
- HERE
複数の系列のデータ
広告
ガントチャートの場合は複数の系列のデータを取り扱う事が可能です。
ここでは例として次のようなデータを元にグラフを作成します。
系列:計画
| タスク名 | 開始時期 | 終了時期 |
|---|---|---|
| 要件定義 | 2007/3/4 | 2007/3/12 |
| 設計 | 2007/3/12 | 2007/3/25 |
| 開発 | 2007/4/2 | 2007/4/30 |
| テスト | 2007/5/1 | 2007/5/10 |
系列:実績
| タスク名 | 開始時期 | 終了時期 |
|---|---|---|
| 要件定義 | 2007/3/4 | 2007/3/14 |
| 設計 | 2007/3/14 | 2007/4/3 |
| 開発 | 2007/4/5 | 2007/5/10 |
| テスト | 2007/5/11 | 2007/5/18 |
系列を表すTaskSeriesクラスのオブジェクトを作成し、それぞれの系列にデータを登録していきます。
実際には次のように記述します。
TaskSeriesCollection data = new TaskSeriesCollection();
String[] taskname = {"要件定義", "設計", "開発", "テスト"};
TaskSeries series1 = new TaskSeries("計画");
TaskSeries series2 = new TaskSeries("実績");
Calendar calendar = Calendar.getInstance();
calendar.set(2007, 3, 4);
Date start = calendar.getTime();
calendar.set(2007, 3, 12);
Date end = calendar.getTime();
Task task11 = new Task("要件定義", start, end);
series1.add(task11);
/* タスクの数だけ繰り返す */
calendar.set(2007, 3, 4);
Date start = calendar.getTime();
calendar.set(2007, 3, 14);
Date end = calendar.getTime();
Task task21 = new Task("設計", start, end);
series2.add(task21);
/* タスクの数だけ繰り返す */
data.add(series1);
data.add(series2);
サンプルプログラム
では簡単なサンプルを作成して試してみます。
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.gantt.TaskSeriesCollection;
import org.jfree.data.gantt.TaskSeries;
import org.jfree.data.gantt.Task;
import java.util.Date;
import java.util.Calendar;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;
public class Test3_1 extends JFrame{
public static void main(String[] args) {
Test3_1 frame = new Test3_1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 500, 500);
frame.setTitle("グラフサンプル");
frame.setVisible(true);
}
Test3_1(){
JFreeChart chart = ChartFactory.createGanttChart("プロジェクト管理",
"項目",
"日程",
createData(),
true,
false,
false);
ChartPanel cpanel = new ChartPanel(chart);
getContentPane().add(cpanel, BorderLayout.CENTER);
}
private TaskSeriesCollection createData(){
TaskSeriesCollection data = new TaskSeriesCollection();
String[] taskname = {"要件定義", "設計", "開発", "テスト"};
TaskSeries series1 = new TaskSeries("計画");
TaskSeries series2 = new TaskSeries("実績");
Task task11 =
new Task(taskname[0], createData(2007, 3, 4), createData(2007, 3, 12));
Task task12 =
new Task(taskname[1], createData(2007, 3, 12), createData(2007, 3, 25));
Task task13 =
new Task(taskname[2], createData(2007, 4, 2), createData(2007, 4, 30));
Task task14 =
new Task(taskname[3], createData(2007, 5, 1), createData(2007, 5, 10));
series1.add(task11);
series1.add(task12);
series1.add(task13);
series1.add(task14);
Task task21 =
new Task(taskname[0], createData(2007, 3, 4), createData(2007, 3, 14));
Task task22 =
new Task(taskname[1], createData(2007, 3, 14), createData(2007, 4, 3));
Task task23 =
new Task(taskname[2], createData(2007, 4, 5), createData(2007, 5, 10));
Task task24 =
new Task(taskname[3], createData(2007, 5, 11), createData(2007, 5, 18));
series2.add(task21);
series2.add(task22);
series2.add(task23);
series2.add(task24);
data.add(series1);
data.add(series2);
return data;
}
private Date createData(int year, int month, int date){
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date);
return calendar.getTime();
}
}
上記をコンパイルした後で実行すると次のようにJavaアプリケーションが起動します。
( Written by Tatsuo Ikura )
JavaDrive