I see some other posts on this argument (see here, here and here), but I cannot get my code to work.
Managed bean:
public void loadGraphic()
{
linearModel = new CartesianChartModel();
LineChartSeries series = new LineChartSeries();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2013);
cal.set(Calendar.MONTH, 10);
cal.set(Calendar.DAY_OF_MONTH, 19);
cal.set(Calendar.HOUR_OF_DAY, 2);
cal.set(Calendar.MINUTE, 33);
cal.set(Calendar.SECOND, 47);
minX = new Timestamp(cal.getTimeInMillis());
minY = new Double("1.44");
maxY = new Double("1.829");
measures = new ArrayList<TriggerGraphicalData>();
measures.add(new TriggerGraphicalData(new Timestamp(cal.getTimeInMillis()), new Double("1.72")));
cal.set(Calendar.HOUR_OF_DAY, 2);
cal.set(Calendar.MINUTE, 48);
cal.set(Calendar.SECOND, 59);
measures.add(new TriggerGraphicalData(new Timestamp(cal.getTimeInMillis()), new Double("1.735")));
cal.set(Calendar.HOUR_OF_DAY, 3);
cal.set(Calendar.MINUTE, 11);
cal.set(Calendar.SECOND, 02);
measures.add(new TriggerGraphicalData(new Timestamp(cal.getTimeInMillis()), new Double("1.44")));
cal.set(Calendar.HOUR_OF_DAY, 3);
cal.set(Calendar.MINUTE, 12);
cal.set(Calendar.SECOND, 04);
measures.add(new TriggerGraphicalData(new Timestamp(cal.getTimeInMillis()), new Double("1.69")));
cal.set(Calendar.HOUR_OF_DAY, 5);
cal.set(Calendar.MINUTE, 30);
cal.set(Calendar.SECOND, 00);
measures.add(new TriggerGraphicalData(new Timestamp(cal.getTimeInMillis()), new Double("1.803")));
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 25);
measures.add(new TriggerGraphicalData(new Timestamp(cal.getTimeInMillis()), new Double("1.829")));
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 27);
measures.add(new TriggerGraphicalData(new Timestamp(cal.getTimeInMillis()), new Double("1.729")));
int seconds = 28;
for (int i = 0; i < 30; i++, seconds++)
{
cal.set(Calendar.SECOND, seconds);
measures.add(new TriggerGraphicalData(new Timestamp(cal.getTimeInMillis()),
new Double("1.75")));
}
cal.set(Calendar.MINUTE, 1);
seconds = 0;
for (int i = 0; i < 60; i++, seconds++)
{
cal.set(Calendar.SECOND, seconds);
measures.add(new TriggerGraphicalData(new Timestamp(cal.getTimeInMillis()),
new Double("1.69")));
}
for (TriggerGraphicalData measure : measures)
{
// series.set(TimeUtil.getSecondInDayRelative(measure.getxValue(), minX),
// measure.getyValue());
series.set(measure.getxValue(), measure.getyValue());
}
maxX = new Timestamp(cal.getTimeInMillis());
linearModel.addSeries(series);
}
XHTML page:
<p:lineChart value="#{monitoringData.linearModel}"
style="height: 400px; width: 99%" legendPosition="ne"
zoom="true" animate="true" yaxisAngle="45"
seriesColors="3399FF, FF9900, 3399FF, FF9900, 3399FF, FF9900"
rendered="#{not empty monitoringData.measures}" extender="chartExtender">
<f:convertDateTime pattern="dd-MM-yyyy HH:mm:ss" />
<script type="text/javascript" src="#{request.contextPath}/js/jqplot.canvasAxisTickRenderer.js" />
<script type="text/javascript" src="#{request.contextPath}/js/jqplot.categoryAxisRenderer.js" />
<script type="text/javascript" src="#{request.contextPath}/js/jqplot.dateAxisRenderer.js" />
<script type="text/javascript">
function chartExtender() {
console.log(this.cfg);
var millis = this.cfg.categories;
var minX = millis[0];
var maxX = millis[millis.length - 1];
console.log(minX);
console.log(maxX);
this.cfg.axes = {
xaxis: {
renderer: $.jqplot.DateAxisRenderer,
min: minX,
max: maxX,
//autoscale: true,
tickRenderer: $.jqplot.CanvasAxisTickRenderer,
tickOptions: {
formatString: '%H:%M:%S',
tickInterval: '3600000',
angle: 60
}
},
yaxis: {
renderer: $.jqplot.LinearAxisRenderer,
tickRenderer:$.jqplot.CanvasAxisTickRenderer,
tickOptions: {
formatString: '%.4f',
angle: 45
}
}
}
//this.cfg.axes.xaxis.ticks = this.cfg.categories;
}
</script>
</p:lineChart>
1) With no extender, the plot is correctly drawed, but the x axis ticks overlap each other (this is an example, I can have charts with more than 200 points).
2) Using an extender without specify the min/max values, the plot is correctly drawed, but the ticks on the x axis disappear (there are only two identical values at the beginning and at the end of the x axis).
3) Like case 2, plus min/max values (specified via javascript within the extender), the ticks are correctly drawed (and can be zoomed also), but no plot renders.
4) Like case 3, with the line "this.cfg.axes.xaxis.ticks = this.cfg.categories" decommented, it breaks the x axis ticks and do not render the plot.
Thanks in advance.