EDIT Use ClusteredXYBarRenderer
代替XYBarRenderer
。这会绘制相邻的条形(而不是 StackedBars)并提供缩放功能。
中没有工厂方法ChartFactory
创造ClusteredXYBarRenderer
.
使用以下方法创建条形图。
private static JFreeChart createClusteredChart(String title, String categoryAxisLabel, String valueAxisLabel, IntervalXYDataset dataset) {
NumberAxis domainAxis = new NumberAxis(categoryAxisLabel);
domainAxis.setAutoRangeIncludesZero(false);
ValueAxis valueAxis = new NumberAxis(valueAxisLabel);
XYBarRenderer renderer = new ClusteredXYBarRenderer();
XYPlot plot = new XYPlot(dataset, domainAxis, valueAxis, renderer);
plot.setOrientation(PlotOrientation.VERTICAL);
JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, true);
return chart;
}
XYBarRenderer
您正在使用的是正确的。但我认为你应该使用CategoryDataSet
代替XYSeriesCollection
。尝试使用下面的数据集而不是XYSeriesCollection
。这将产生相邻的条形而不是堆叠的条形。
private static CategoryDataset createDataset() {
String series1 = "First";
String series2 = "Second";
String series3 = "Third";
String category1 = "Category 1";
String category2 = "Category 2";
String category3 = "Category 3";
String category4 = "Category 4";
String category5 = "Category 5";
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0D, series1, category1);
dataset.addValue(4.0D, series1, category2);
dataset.addValue(3.0D, series1, category3);
dataset.addValue(5.0D, series1, category4);
dataset.addValue(5.0D, series1, category5);
dataset.addValue(5.0D, series2, category1);
dataset.addValue(7.0D, series2, category2);
dataset.addValue(6.0D, series2, category3);
dataset.addValue(8.0D, series2, category4);
dataset.addValue(4.0D, series2, category5);
dataset.addValue(4.0D, series3, category1);
dataset.addValue(3.0D, series3, category2);
dataset.addValue(2.0D, series3, category3);
dataset.addValue(3.0D, series3, category4);
dataset.addValue(6.0D, series3, category5);
return dataset;
}