我希望使用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ç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个月(见下图),依此类推。
我在网上找不到显示如何使用ChartModel创建Trinidad折线图的示例。饼图只需this one。因此,我无法发现我的错误在哪里。
谢谢,
Rafael Afonso。
答案 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。