0

我创建了一个时间序列图,我希望 x 轴从我的系列的最小值开始,现在从 sql 返回的最小值是 '2011-06-30' 但 x 轴似乎从' 2011 年 5 月 1 日'。我尝试通过计算最小日期并将其映射到 java.util.Date 字段,然后将该字段设置为域轴最小值表达式来从 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”改为从系列中的最低日期设置。有没有办法执行以下操作之一:
* 从自定义程序类中获取系列中的最短日期。
* 一种在 sql 查询中映射的方法以正确的格式返回计算出的思维导图,以便我可以在“域轴最小值表达式”字段中正确设置图表?
非常感谢任何帮助。

4

1 回答 1

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)来消除这种情况。上边距的类比。

于 2013-08-01T10:27:06.463 回答