【问题标题】:JFreeChart - How to remove gaps between XYBarRenderer in a TimeSeriesChartJFreeChart - 如何消除 TimeSeriesChart 中 XYBarRenderer 之间的间隙
【发布时间】:2014-04-09 21:34:15
【问题描述】:

我正在尝试消除 TimeSeriesChart 中 XYBarRenderer 上的条形之间的间隙。也就是说,我想在bar的前后都没有数据的时候展开bar的时间。是否可以?非常感谢您的帮助。

这是我的代码:

protected JFreeChart criarChart(XYDataset dataset){
    JFreeChart chart;

    chart = ChartFactory.createTimeSeriesChart(
            this.getTitulo(), //titulo
            this.getEixoX(), //nome do eixo-x
            this.getEixoY(), //nome do eixo-y
            dataset, //dados
            true, //criar legenda?
            true, //criar tooltips?
            false); //criar URLs?

    chart.setBackgroundPaint(Color.white);

    XYPlot plot = (XYPlot) chart.getPlot();
    plot.setOrientation(PlotOrientation.VERTICAL);
    plot.setBackgroundPaint(Color.lightGray);
    plot.setDomainGridlinePaint(Color.white);
    plot.setRangeGridlinePaint(Color.white);
    plot.setDomainCrosshairVisible(true);
    plot.setRangeCrosshairVisible(true);
    plot.getRenderer().setSeriesPaint(0, Color.red);

    plot.setRenderer(new ClusteredXYBarRenderer() {
                @Override
                public Paint getItemPaint(int series, int item) {
                    XYDataset dataset = getPlot().getDataset();
                    if (dataset.getYValue(series, item) >= 0.0) {
                        return Color.green;
                    }
                    else {
                        return Color.red;
                    }
                }
            }
    );
    XYItemRenderer renderer = plot.getRenderer();
    if(renderer instanceof XYBarRenderer){
        XYBarRenderer r = (XYBarRenderer)renderer;
        r.setBarPainter(new StandardXYBarPainter());
        r.setMargin(-20.0);
        r.setShadowVisible(false);
    }
    //mostra o tooltip das barras do grafico
    plot.getRenderer().setBaseToolTipGenerator(new StandardXYToolTipGenerator(
    StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
    new SimpleDateFormat("HH:mm"), new DecimalFormat("#0")));

    DateAxis axis = (DateAxis) plot.getDomainAxis();
    axis.setDateFormatOverride(new SimpleDateFormat("HH:mm"));

    return chart;
}

我看到某处可以更改 Margin,所以我尝试使用:

r.setMargin(-20.0);

但没用。

【问题讨论】:

    标签: jfreechart timeserieschart


    【解决方案1】:

    XYBarRenderer 依赖数据集提供确定条形宽度的值(请参阅getStartXValue()getEndXValue() 方法)。它还按称为“边距”的百分比修剪宽度。仅在大于零时使用边距,您可以指定一个数字,例如 0.20(百分之二十)。默认边距为 0.0。

    【讨论】: