You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JFreeChart中组合柱状图与折线图?

解决JFreeChart组合折线图与柱状图的问题

你当前的代码已添加第二个数据集,但未为其指定柱状图渲染器,导致默认仍以折线形式展示。要实现折线+柱状的组合效果,需为第二个数据集绑定XYBarRenderer(基于XYPlot的时间序列图表需使用XY类型的柱状渲染器),具体修改如下:

修改后的完整代码

barDataset = new TimeSeriesCollection();
lineDataset = new TimeSeriesCollection();
totalDistanceSeries = new TimeSeries("Total Distance");
movingAverageSeries = new TimeSeries("Moving Average");
while (rs.next()) {
    myDate = rs.getDate("Date");
    d = new Day(myDate);
    totalDistance = rs.getDouble("TotaleAfstand");
    movingAverage = rs.getDouble("MovingAverage");
    totalDistanceSeries.add(d, totalDistance);
    movingAverageSeries.add(d, movingAverage);
}
barDataset.addSeries(totalDistanceSeries);
lineDataset.addSeries(movingAverageSeries);

String chartTitle = "Monthly Chart with Moving Average";
String xAxisLabel = "Date";
String yAxisLabel = "TotalDistance";

JFreeChart chart = ChartFactory.createTimeSeriesChart(chartTitle,
        xAxisLabel, yAxisLabel, lineDataset);
XYPlot plot = (XYPlot) chart.getXYPlot();

// 配置折线图渲染器(对应第一个数据集,索引0)
XYLineAndShapeRenderer lineRenderer = (XYLineAndShapeRenderer) plot.getRenderer(0);
lineRenderer.setBaseShapesVisible(true);

// 创建并配置柱状图渲染器(对应第二个数据集,索引1)
XYBarRenderer barRenderer = new XYBarRenderer();
// 调整柱子间距,0.4表示柱子间留40%的空隙
barRenderer.setMargin(0.4);
// 设置柱子颜色
barRenderer.setSeriesPaint(0, Color.BLUE);
// 将渲染器与第二个数据集绑定
plot.setRenderer(1, barRenderer);

// 关联第二个数据集到图表
plot.setDataset(1, barDataset);

chartPanel = new ChartPanel(chart);
chartPanel.setLocation(10, 60);
chartPanel.setSize(1850, 900);
add(chartPanel);

关键修改说明

  • 明确区分两个数据集的渲染器:索引0对应折线图的XYLineAndShapeRenderer,索引1对应柱状图的XYBarRenderer
  • 通过plot.setRenderer(1, barRenderer)将柱状渲染器与第二个数据集绑定,确保该数据集以柱状形式展示
  • 可通过XYBarRenderer的方法自定义样式,比如setMargin()调整柱子间距、setSeriesPaint()设置柱子颜色

内容的提问来源于stack exchange,提问作者Matthijs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:10:24