如何在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
相关产品推荐
相关产品推荐

