域轴最小值表达式的动态设置

时间:2013-08-01 07:45:49

标签: java charts jasper-reports jfreechart

我创建了一个时间序列图表,我希望x轴从我的系列的最小值开始,现在从sql返回的最小值是'2011-06-30',但x轴似乎是从'2011-05-01'开始。我尝试通过计算最小日期并将其映射到java.util.Date字段,然后将字段设置为Domain Axis Min Value Expression但是没有运气来从sql设置它。 我也使用java Customizerclass来修改图表的布局,如果我在自定义程序类中执行此操作,它似乎有效:

RotatingLabelAxis domainAxis = new RotatingLabelAxis();

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
java.util.Date date = null;
try {
    date = sdf.parse("30.06.2011");  //Would like this to be the first date in plot instead.
} catch (ParseException e) {
    e.printStackTrace();
}

domainAxis.setMinimumDate(date);

这似乎是第一个值到2011-07-01的价值是正确的。问题是我希望上面例子中的日期“2011-06-30”从系列中的最低日期开始设置。有没有办法做到以下其中一种:
 *从customizerclass中获取系列中的最小日期  *在sql查询中映射的方法以正确的格式返回计算的mindate,因此我可以在图表中的“Domain Axis Min Value Expression”字段中正确设置它?
任何帮助非常感谢。

1 个答案:

答案 0 :(得分:0)

JFreeChart应自动设置DomainAxis(DateAxis)的最小值和最大值,除非您使用setAutoRange(false)禁用此功能。如果自动范围无法满足您的需求,您可以使用setMinumumDate() / setMaximumDate()方法调整此范围(就像您在示例代码中所做的那样)。

您确实为JFreeChart的数据集提供了值,因此在没有JFreeChart的情况下应该可以找到最小日期。但是,您可以询问实际使用的数据集(我假设TimeSeriesCollection),例如:

XYPlot xyPlot = chart.getXYPlot();
XYDataset dataset = (XYDataset)xyPlot.getDataset();
double lowerBound = dataset.getXValue(0, 0);
double lowerBound = getDomainLowerBound(false);
java.util.Date lowerDate = new java.util.Date((long)lowerBound);
domainAxis.setMinimumDate(lowerDate);

注意,默认情况下,该轴还有一个大于零的边距。使用domainAxis.setLowerMargin(0.0)来消除此问题。类比为上边距。