修复JFreeChart中条形图宽度和条形间距

时间:2010-05-11 04:33:15

标签: width jfreechart bar-chart

我有堆积条形图,其中列数是动态的,可以从1列更改为n列。我希望图表和条形宽度之间的间距保持一致。我如何解决它。请提出解决方案/想法。

2 个答案:

答案 0 :(得分:4)

在堆积条形图中,您可以使用

更改条形之间的间距
  • CategoryAxis.setLowerMargin
  • CategoryAxis.setMargin和
  • CategoryAxis.setUpperMargin

代码低于

protected JFreeChart generateGraph() {

  CategoryAxis categoryAxis = new CategoryAxis("Categories");
  categoryAxis.setLowerMargin(.01);
  categoryAxis.setCategoryMargin(.01);
  categoryAxis.setUpperMargin(.01);      
  categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);

  ValueAxis valueAxis = new NumberAxis("Values");

  StackedBarRenderer renderer = new StackedBarRenderer();
  renderer.setBarPainter(new StandardBarPainter());
  renderer.setDrawBarOutline(false);
  renderer.setShadowVisible(false);
  renderer.setBaseItemLabelsVisible(true);
  renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());

  CategoryPlot plot = new CategoryPlot( _dataset,
                                        categoryAxis,
                                        valueAxis,
                                        renderer);

  plot.setOrientation(PlotOrientation.VERTICAL);

  JFreeChart chart = new JFreeChart( "Title",
                          JFreeChart.DEFAULT_TITLE_FONT,
                          plot,
                          true);
  //ChartFactory.getChartTheme().apply(_chart);
  return chart;
}

答案 1 :(得分:2)

StackedBarRenderer致力于使“条形和条形宽度之间的间距保持一致”。当列数发生变化时,您不希望它以不同的方式做什么。相关几何由父BarRenderercalculateBarWidth()等方法确定,可以根据需要覆盖。另外,请确认每个系列中的每个类别都有值。