现在要生成用DateAxis类型的X轴的XYBarChart,数据是用TimeSeriesCollection 类型设置进去,
但是发现如果用复数个柱状时,不同颜色的柱状重叠在一块了,
不知道谁对该时间轴的柱状图比较清楚,如何解决复数柱状的显示问题。
求指教 .
Some code is as below: public static String createBarChart(XYDataset dataset, String xName,
String yName, String chartTitle, String charName, Double days) {
JFreeChart chart = ChartFactory.createXYBarChart(chartTitle, xName,
true, yName, (IntervalXYDataset) dataset,
PlotOrientation.VERTICAL, true, false, false);
XYPlot xyplot = (XYPlot) chart.getPlot();
// Set the chart data part of the background color
xyplot.setBackgroundPaint(Color.lightGray);
// Set axes and chart data show some distance
xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
// Vertical grid line color
xyplot.setDomainGridlinePaint(Color.white);
// Horizontal grid line color
xyplot.setRangeGridlinePaint(Color.white);
// Data points can be seen
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot
.getRenderer();
xylineandshaperenderer.setBaseShapesVisible(true);
xylineandshaperenderer.setUseFillPaint(true);
// y-axis
NumberAxis numAxis = (NumberAxis) xyplot.getRangeAxis();
// x-axis
DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis();
// y-axis labels are automatically determines the data
numAxis.setAutoTickUnitSelection(true);
// x-axis labels are automatically determines the data
dateaxis.setAutoTickUnitSelection(false);
SimpleDateFormat format;
if (0 < days && days < 2) {
if (0 < days && days < 1.125)
// x-axis unit interval is 1 hour
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR, 1));
if (1.125 <= days && days < 2)
// x-axis unit interval is 2 hours
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR, 2));
format = new SimpleDateFormat("hh:mm");
} else {
if (2 <= days && days < 14)
// x-axis unit interval is 1 day
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR, 24));
if (14 <= days && days < 61)
// x-axis unit interval is 1 week
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR,
24 * 7));
if (61 <= days)
// x-axis unit interval is 1 month
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR,
24 * 30));
format = new SimpleDateFormat("yyyy-MM-dd");
}
dateaxis.setDateFormatOverride(format);
FileOutputStream fos_jpg = null;
try {
isChartPathExist(CHART_PATH);
String chartName = CHART_PATH + charName;
fos_jpg = new FileOutputStream(chartName);
ChartUtilities.writeChartAsJPEG(fos_jpg, chart, 1024, 800);
return chartName;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
但是发现如果用复数个柱状时,不同颜色的柱状重叠在一块了,
不知道谁对该时间轴的柱状图比较清楚,如何解决复数柱状的显示问题。
求指教 .
Some code is as below: public static String createBarChart(XYDataset dataset, String xName,
String yName, String chartTitle, String charName, Double days) {
JFreeChart chart = ChartFactory.createXYBarChart(chartTitle, xName,
true, yName, (IntervalXYDataset) dataset,
PlotOrientation.VERTICAL, true, false, false);
XYPlot xyplot = (XYPlot) chart.getPlot();
// Set the chart data part of the background color
xyplot.setBackgroundPaint(Color.lightGray);
// Set axes and chart data show some distance
xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
// Vertical grid line color
xyplot.setDomainGridlinePaint(Color.white);
// Horizontal grid line color
xyplot.setRangeGridlinePaint(Color.white);
// Data points can be seen
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot
.getRenderer();
xylineandshaperenderer.setBaseShapesVisible(true);
xylineandshaperenderer.setUseFillPaint(true);
// y-axis
NumberAxis numAxis = (NumberAxis) xyplot.getRangeAxis();
// x-axis
DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis();
// y-axis labels are automatically determines the data
numAxis.setAutoTickUnitSelection(true);
// x-axis labels are automatically determines the data
dateaxis.setAutoTickUnitSelection(false);
SimpleDateFormat format;
if (0 < days && days < 2) {
if (0 < days && days < 1.125)
// x-axis unit interval is 1 hour
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR, 1));
if (1.125 <= days && days < 2)
// x-axis unit interval is 2 hours
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR, 2));
format = new SimpleDateFormat("hh:mm");
} else {
if (2 <= days && days < 14)
// x-axis unit interval is 1 day
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR, 24));
if (14 <= days && days < 61)
// x-axis unit interval is 1 week
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR,
24 * 7));
if (61 <= days)
// x-axis unit interval is 1 month
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR,
24 * 30));
format = new SimpleDateFormat("yyyy-MM-dd");
}
dateaxis.setDateFormatOverride(format);
FileOutputStream fos_jpg = null;
try {
isChartPathExist(CHART_PATH);
String chartName = CHART_PATH + charName;
fos_jpg = new FileOutputStream(chartName);
ChartUtilities.writeChartAsJPEG(fos_jpg, chart, 1024, 800);
return chartName;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
ClusteredXYBarRenderer r = new ClusteredXYBarRenderer();
chart.getXYPlot().setRenderer(r);