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?
set two or three hour time range in dataaxis - XYbarchart
-
- Posts: 3
- Joined: Fri Oct 23, 2015 7:29 pm
- antibot: No, of course not.
-
- 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
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;
}
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;
}