如何在JFreeChart中设置横轴显示两行数据?请给出完整代码
时间: 2024-12-28 18:35:55 浏览: 10
在JFreeChart中,如果你想在横轴上显示两行数据,你可以通过创建双Y轴图来实现。以下是一个简单的示例,展示如何在一个图表中添加两个Y轴,并分别对应不同的数据系列:
```java
import org.jfree.chart.ChartFactory;
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.data.category.DefaultCategoryDataset;
public class DualYAxisExample {
public static void main(String[] args) {
// 创建数据集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series 1", "A");
dataset.addValue(20, "Series 1", "B");
dataset.addValue(30, "Series 1", "C");
dataset.addValue(40, "Series 2", "A");
dataset.addValue(50, "Series 2", "B");
dataset.addValue(60, "Series 2", "C");
// 创建图表
JFreeChart chart = ChartFactory.createXYLineChart(
"Dual Y Axis Example",
"X Axis", // 横轴标签
"Series", // 纵轴标签
dataset,
PlotOrientation.VERTICAL,
true, // 是否启用网格线
true, // 是否显示标题
false // 是否包含工具提示
);
// 获取并配置第一个Y轴
CategoryPlot plot = (CategoryPlot) chart.getPlot();
CategoryAxis yAxis1 = plot.getDomainAxis(); // 假设默认为第一Y轴
yAxis1.setAutoRangeIncludesZero(true);
NumberAxis axis2 = new NumberAxis("Secondary Y Axis"); // 第二个Y轴
axis2.setStandardTickUnits(NumberAxis.createIntegerTickUnit()); // 设置单位
plot.addSecondAxis(axis2, yAxis1); // 添加到plot
// 分配数据系列到各自的Y轴
plot.setDataset(0, dataset);
plot.mapDatasetToAxis(dataset, yAxis1);
// 显示第二个数据系列到第二Y轴
plot.setDataset(1, createSecondaryDataset(dataset)); // 假设createSecondaryDataset函数负责生成新的数据集
plot.mapDatasetToAxis(createSecondaryDataset(dataset), axis2);
// 其他自定义设置...
// ...
// 渲染图表
ChartFrame frame = new ChartFrame("Chart", chart);
frame.pack();
frame.setVisible(true);
}
private static DefaultCategoryDataset createSecondaryDataset(DefaultCategoryDataset primary) {
// 实现这个方法,创建一个新的数据集,格式与primary类似,但数据不同,以便映射到第二Y轴
return null; // 这里需要根据实际需求填充数据
}
}
```
在这个例子中,我们首先创建了一个`DefaultCategoryDataset`,然后创建了一个包含两个数据系列的`XYLineChart`。我们将一个数据系列分配给默认的Y轴(即第一行),而另一个数据系列则分配给新创建的第二Y轴。记得根据实际需求调整数据生成的部分。
阅读全文