kil*_*tek 4 java exception graph time-series jfreechart
我在使用JFreechart -Api 创建时间序列图表时遇到问题。在时间序列图中,我希望 x 轴显示天月。确实如此,但是由于 SeriesException ,我在创建时间序列数据时无法正确设置日期。
我可以提供一个最小的示例,可以对其进行编译以查看错误是如何发生的。
我知道月份类可以将日期作为参数
我使用 Month(Date date)-Consturctor 的方式有什么问题?我如何设置时间序列数据中的日期,以便它们显示在图中?
(注:不包括进口产品。)
public class MyTimeSeriesGraphMinimalExample {
public static void main(String args[]) {
TimeSeries timeseries = new TimeSeries("Series 1");
//works not
timeseries.add(new Month(new Date(2002, 1, 1, 12, 45, 23)),
100.10000000000002D);//day 1
timeseries.add(new Month(new Date(2002, 1, 2, 12, 45, 23)),
694.10000000000002D);// day 2
// works timeseries.add(new Month(3, 2002), 734.39999999999998D);
// works timeseries.add(new Month(4, 2002), 453.19999999999999D);
TimeSeries timeseries1 = new TimeSeries("Series 2");
//works not
timeseries1.addOrUpdate(new Month(new Date(2002, 1, 1, 12, 45, 23)),
234.09999999999999D);// day 1
timeseries1.addOrUpdate(new Month(new Date(2002, 1, 2, 12, 45, 23)),
623.70000000000005D);// day 2
//works timeseries1.add(new Month(3, 2002), 642.5D);
//works timeseries1.add(new Month(4, 2002), 700.39999999999998D);
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(timeseries);
timeseriescollection.addSeries(timeseries1);
XYDataset xydataset = timeseriescollection;
//chart-visual-property-settings
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(
"Time Series Demo 3", "Time", "Value", xydataset, true, true,
false);
XYPlot xyplot = (XYPlot) jfreechart.getPlot();
DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis();
dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.MONTH, 1,
new SimpleDateFormat("dd-MMM")));
dateaxis.setVerticalTickLabels(true);
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot
.getRenderer();
xylineandshaperenderer.setBaseShapesVisible(true);
xylineandshaperenderer.setSeriesFillPaint(0, Color.red);
xylineandshaperenderer.setSeriesFillPaint(1, Color.green);
xylineandshaperenderer.setSeriesPaint(0, Color.red);
xylineandshaperenderer.setSeriesPaint(1, Color.green);
xylineandshaperenderer.setUseFillPaint(true);
xylineandshaperenderer
.setLegendItemToolTipGenerator(new StandardXYSeriesLabelGenerator(
"Tooltip {0}"));
//draw
try {
ChartUtilities.saveChartAsJPEG(new File("C:/series.jpeg"),
jfreechart, 600, 500);
} catch (Exception e) {
// TODO: handle exception
}
}
}
Run Code Online (Sandbox Code Playgroud)
例外的是:
org.jfree.data.general.SeriesException:
You are attempting to add an observation for the time period February 3902 but
the series already contains an observation for that time period. Duplicates
are not permitted. Try using the addOrUpdate() method.
Run Code Online (Sandbox Code Playgroud)
您正尝试在系列中添加两次相同的点。两个都:
new Month(new Date(2002, 1, 1, 12, 45, 23)) and
new Month(new Date(2002, 1, 2, 12, 45, 23))
Run Code Online (Sandbox Code Playgroud)
代表同一个月。
如果您想要有两个值,一个代表 1 月 1 日,一个代表 1 月 2 日,请使用org.jfree.data.time.Day:
timeseries.add(new Day(1, 1, 2002), 100.10000000000002D);
timeseries.add(new Day(2, 1, 2002), 694.10000000000002D);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,new Month(new Date(2002, 1, 1, 12, 45, 23))是 3902 年 2 月,而不是 2002 年 1 月,因为java.util.Date构造函数将其作为参数:年份减去 1900,月份介于 0-11 之间
| 归档时间: |
|
| 查看次数: |
4968 次 |
| 最近记录: |