DefaultCategoryDataset构建两条首尾相连的折线图
时间: 2023-06-12 17:07:11 浏览: 160
要构建两条首尾相连的折线图,可以使用 JFreeChart 库中的 `DefaultCategoryDataset` 类和 `ChartFactory` 类。
以下是一个示例代码,它构建了两条首尾相连的折线图:
```java
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
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.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
public class LineChartExample {
public static void main(String[] args) {
// 创建数据集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, "Series 1", "Category 1");
dataset.addValue(2.0, "Series 1", "Category 2");
dataset.addValue(3.0, "Series 1", "Category 3");
dataset.addValue(4.0, "Series 1", "Category 4");
dataset.addValue(5.0, "Series 1", "Category 5");
dataset.addValue(6.0, "Series 1", "Category 6");
dataset.addValue(7.0, "Series 1", "Category 7");
dataset.addValue(4.0, "Series 2", "Category 1");
dataset.addValue(3.0, "Series 2", "Category 2");
dataset.addValue(2.0, "Series 2", "Category 3");
dataset.addValue(1.0, "Series 2", "Category 4");
dataset.addValue(0.5, "Series 2", "Category 5");
dataset.addValue(1.5, "Series 2", "Category 6");
dataset.addValue(2.5, "Series 2", "Category 7");
// 创建图表
JFreeChart chart = ChartFactory.createLineChart(
"Line Chart Example", // 图表标题
"Category", // X 轴标题
"Value", // Y 轴标题
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向
true, // 是否显示图例
true, // 是否生成工具提示
false // 是否生成 URL 链接
);
// 配置图表样式
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.white);
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.gray);
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlinePaint(Color.gray);
LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
renderer.setSeriesPaint(0, Color.blue);
renderer.setSeriesPaint(1, Color.green);
renderer.setBaseItemLabelsVisible(true);
plot.setRenderer(renderer);
// 配置 X 轴
CategoryAxis xAxis = plot.getDomainAxis();
xAxis.setLowerMargin(0.0);
xAxis.setUpperMargin(0.0);
// 配置 Y 轴
NumberAxis yAxis = (NumberAxis) plot.getRangeAxis();
yAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
yAxis.setAutoRangeIncludesZero(true);
// 创建图表面板并添加到窗口中
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 300));
JFrame frame = new JFrame("Line Chart Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
```
代码中使用了 `DefaultCategoryDataset` 类来创建数据集,向数据集中添加了两个系列的数据,每个系列有七个数据点。然后使用 `ChartFactory` 类的 `createLineChart` 方法创建了一个折线图,最后将折线图添加到一个窗口中显示出来。
在折线图中,有两个系列(Series 1 和 Series 2),每个系列对应一个颜色(蓝色和绿色)。在数据集中,每个系列的数据点通过一个字符串类型的分类变量(Category 1 到 Category 7)进行分类。使用 `LineAndShapeRenderer` 类来设置折线的颜色和是否显示数据点,使用 `CategoryAxis` 和 `NumberAxis` 类来配置 X 轴和 Y 轴的样式。
阅读全文