DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "Jan", "Spring Security");
dataset.addValue(150, "Jan", "jBPM 4");
dataset.addValue(300, "Jan", "Ext JS");
dataset.addValue(100, "Jan", "JFreeChart");
addValue(value, rowKey, columnKey):單序列時保持 rowKey 一致。
JFreeChart chart = ChartFactory.createLineChart(
"chart", // 標題
"num", // 域軸 (橫軸) 標籤
"type", // 數值軸 (縱軸) 標籤
dataset, // 資料集
PlotOrientation.VERTICAL, // 垂直佈局
true, // 顯示圖例
false, // 顯示工具提示
false // URL 連結
);
ChartUtilities.writeChartAsPNG(outputStream, chart, width, height);

僅需將工廠方法換為 createLineChart3D(),其餘參數相同。

dataset.addValue(100, "Jan", "Spring Security");
dataset.addValue(150, "Jan", "jBPM 4");
dataset.addValue(300, "Jan", "Ext JS");
dataset.addValue(100, "Jan", "JFreeChart");
dataset.addValue(200, "Feb", "Spring Security");
dataset.addValue(120, "Feb", "jBPM 4");
dataset.addValue(240, "Feb", "Ext JS");
dataset.addValue(40, "Feb", "JFreeChart");
每個 rowKey (Jan/Feb) 自動形成一條折線。

CategoryPlot plot = chart.getCategoryPlot();
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
renderer.setBaseShapesVisible(true);
renderer.setShape(new Ellipse2D.Double(-2, -2, 4, 4)); // 圓形節點
renderer.setItemLabelsVisible(true);
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setStroke(new BasicStroke(
1.0f, // 線寬
BasicStroke.CAP_BUTT, // 端點樣式
BasicStroke.JOIN_MITER, // 連接樣式
10.0f, // 斜接限制
new float[] {10.0f}, // 虛線模式:畫 10px、空 10px
0.0f // 相位偏移
));
善用 Java2D BasicStroke 可繪製任意線型。

ChartFactory → JFreeChart → CategoryPlot → LineAndShapeRendererCategoryDataset (介面) ← DefaultCategoryDataset