set two or three hour time range in dataaxis - XYbarchart

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
milinda.rana
Posts: 3
Joined: Fri Oct 23, 2015 7:29 pm
antibot: No, of course not.

set two or three hour time range in dataaxis - XYbarchart

Post by milinda.rana » Sat Oct 24, 2015 10:04 am

Im using below code to create XYbarchart. I need to draw the bar for two or more than two hours but my code draw only for one hour in a day. so is there a way to do it?

private void createXYBarChart(OutputStream out, Object data)
throws Exception {

ChartRenderingInfo info = new ChartRenderingInfo();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] ptsImageBytes = null;
final IntervalXYDataset intvlXYDataset = createIntervalXYDataset();

if (intvlXYDataset != null) {

final JFreeChart chart = ChartFactory.createXYBarChart("Time on Hold","Arrival Time (Hrs)", true,"Hold Time (Mins)", intvlXYDataset,PlotOrientation.VERTICAL, true, true, false);

DateAxis axis = (DateAxis) chart.getXYPlot().getDomainAxis();
axis.setTickUnit(new DateTickUnit(DateTickUnitType.DAY, 1));
axis.setDateFormatOverride(new SimpleDateFormat("dd-MM-yyyy"));

if(intvlXYDataset.getSeriesCount()>8){
axis.setVerticalTickLabels(true);
}

XYBarRenderer renderer = (XYBarRenderer) chart.getXYPlot().getRenderer();
renderer.setBarPainter(new StandardXYBarPainter());
renderer.setDrawBarOutline(false);


BufferedImage pageImage = chart.createBufferedImage(CHART_WIDTH,CHART_HEIGHT, BufferedImage.TYPE_INT_BGR, info);
ImageIO.write(pageImage, IMAGE_TYPE, baos);
baos.flush();
if (null != baos) {
ptsImageBytes = baos.toByteArray();
}

ImageIO.write(pageImage, IMAGE_TYPE, out);

}

}

private IntervalXYDataset createIntervalXYDataset() {

TimeSeriesCollection result=new TimeSeriesCollection();
TimeSeries s1=new TimeSeries("Daily Holding Time");

if (holdTimeRptList != null && holdTimeRptList.size() > 0
&& graphList != null && graphList.size() > 0) {

for (String graph : graphList) {
s1 = new TimeSeries(graph);
for (reportDto reportDto : holdTimeRptList) {
if (reportDto != null && reportDto.getHoldTime() != 0 && reportDto.getGraphTime() != null && reportDto.getGraphTime().equalsIgnoreCase(graph)) {

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm");
Hour mint=new Hour(formatter.parse(reportDto.getGraphHoldEntry()));
s1.addOrUpdate(mint, Integer.valueOf(reportDto.getHoldTime()));

}
}
result.addSeries(s1);
}
}

return result;
}

As a example , If I set the date 24/10/2015 13:00:00 then time range will be 13:00:00 to 14:00:00 but I need to set time range 13:00:00 to 16:00:00. is it possible do?

milinda.rana
Posts: 3
Joined: Fri Oct 23, 2015 7:29 pm
antibot: No, of course not.

Re: set two or three hour time range in dataaxis - XYbarchar

Post by milinda.rana » Sat Oct 24, 2015 6:35 pm

I found the answer to the question.

private IntervalXYDataset createIntervalXYDataset() {


TimePeriodValuesCollection result = new TimePeriodValuesCollection();
TimePeriodValues s1 = new TimePeriodValues("Daily Holding Time");

if (holdTimeRptList != null && holdTimeRptList.size() > 0
&& graphList != null && graphList.size() > 0) {

for (String graph : graphList) {
s1 = new TimePeriodValues(graph);
for (reportDto reportDto : holdTimeRptList) {
if (reportDto != null
&& reportDto.getHoldTime() != 0
&& reportDto.getGraphTime() != null
&& reportDto.getGraphTime().equalsIgnoreCase(
graph)) {

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date dt=formatter.parse(reportDto.getHoldEntry());
Date dt1=DateUtils.addHours(dt, 5);

s1.add(new SimpleTimePeriod(dt, dt1), Integer.valueOf(reportDto.getHoldTime()));

}
}
result.addSeries(s1);
}
}

return result;
}

Locked