特立尼达的折线图

时间:2014-03-31 19:21:35

标签: jsf charts trinidad

我希望使用line chart绘制Trinidad 1.2。我有一个名为AcidenteTO的类,它包含指示年份的int和一个指示每个月值的int数组。在用于填充我的图表的ChartModel中,我通过了一份AcidenteTO列表。

public class AcidenteTO implements Serializable {

    // -------------[ Atributos ]----------------------

    private int ano; // year

    private int[] quantidades = new int[12]; // quantities for month


    // Getters & Setters as usual
}

public class AcidentesChartModel extends ChartModel {

    private final List<AcidenteTO> acidentes;

    // Indicate the labels for each year
    private final List<String> anosLabel; 

    private List<List<Double>> yValues;

    private final Double maxYValue;

    // Month labels
    private final List<String> mesesLabels =
        Arrays.asList("Janeiro", "Fevereiro", "Mar&ccedil;o", "Abril", "Maio",
                      "Junho", "Julho", "Agosto", "Setembro", "Outubro",
                      "Novembro", "Dezembro");

    AcidentesChartModel(List<AcidenteTO> acidentes) {
        this.acidentes = acidentes;

        yValues = new ArrayList<List<Double>>(this.acidentes.size());
        List<String> anosLabel = new ArrayList<String>(this.acidentes.size());
        this.anosLabel = new ArrayList<String>(this.acidentes.size());
        double maxY = 0D;

        for (AcidenteTO a : this.acidentes) {
            maxY = preencherDados(a, maxY);
        }

        this.maxYValue = maxY;
    }

    private double preencherDados(AcidenteTO a, double maxY) {
        List<Double> mesesValues = new ArrayList<Double>(12); // Monthly values for each year
        for (int i = 0; i < 12; i++) {
            mesesValues.add((double)a.getQuantidades()[i]);
            if (a.getQuantidades()[i] > maxY) {
                maxY = a.getQuantidades()[i];
            }
        }
        this.anosLabel.add(String.valueOf(a.getAno()));
        this.yValues.add(mesesValues);

        return maxY;
    }

    public List<String> getSeriesLabels() {
        return this.anosLabel;
    }

    public List<String> getGroupLabels() {
        return this.mesesLabels;
    }

    public List<List<Double>> getYValues() {
        return this.yValues;
    }

    public Double getMaxYValue() {
        return this.maxYValue;
    }

}

我所期待的是,每年我有12个数据要绘制,它将绘制每年的所有12个值。但实际发生的情况如下:如果我传递了3个AcidenteTO列表,生成的图表显示数据直到第3个月。如果我通过4个AcidenteTO列表,该图表显示数据直到第4个月。 7 AcidenteTO的列表,直到第7个月(见下图),依此类推。

Ploting 7 months because I have 7 years

我在网上找不到显示如何使用ChartModel创建Trinidad折线图的示例。饼图只需this one。因此,我无法发现我的错误在哪里。

谢谢,

Rafael Afonso。

1 个答案:

答案 0 :(得分:0)

是否曾考虑使用Highcharts在特立尼达项目中生成图表?我们这样做,它就像一个魅力! Highcharts有更多的可能性来生成图形并添加交互性<tr:chart>。请参阅Highcharts中pie charts and other graphs的这些示例。

缺点是你没有JSF组件可以使用。创建静态图表很简单,但您可能需要编写几行代码将数据传递给Highcharts Javascript以使事情变得更有趣。特立尼达的ExtendedRenderKitService在那里派上用场:

ExtendedRenderKitService service = 
  Service.getRenderKitService(facesContext, ExtendedRenderKitService.class);
service.addScript(facesContext, "alert('foo');");

修改

我刚刚发现了这个,还没有尝试过,但我会测试它:Java API for generating highchart JSON