Java 如何在jfreecharts中绘制不带';t为我插入日期值?

Java 如何在jfreecharts中绘制不带';t为我插入日期值?,java,charts,jfreechart,bar-chart,Java,Charts,Jfreechart,Bar Chart,我正在尝试使用JFreechart在XYBarChart上显示数据。图表应显示时间点和计数。因此,如果用户选择1月25日和3月25日作为范围,图表应以一定间隔显示这些日期之间的数据: 如果用户选择小时,那么我将创建从1月25日到3月10日的每小时的集合,以及相应的计数。当然,这是一个相当大的收藏。如果用户选择月,那么用户应该看到3个月(集合中只有3个条目)。如果用户选择DAY,那么用户只能看到大约60个条目。看到了吗 当我创建图表时(使用下面生成数据集的代码),它会“插入”值。如果我选择小时,它

我正在尝试使用JFreechart在XYBarChart上显示数据。图表应显示时间点和计数。因此,如果用户选择1月25日和3月25日作为范围,图表应以一定间隔显示这些日期之间的数据:

如果用户选择小时,那么我将创建从1月25日到3月10日的每小时的集合,以及相应的计数。当然,这是一个相当大的收藏。如果用户选择月,那么用户应该看到3个月(集合中只有3个条目)。如果用户选择DAY,那么用户只能看到大约60个条目。看到了吗

当我创建图表时(使用下面生成数据集的代码),它会“插入”值。如果我选择小时,它会按天显示数据,每天之间有许多条(即一天内有24条小条)。如果我选择月份,我仍然得到2个月的天数,但我得到一个巨大的区块,涵盖了一个月的所有天数。如果我选择一天,它看起来不错

我怎样才能让jfreecharts停止插值,只画一个1:1映射到我给出的数据的图表呢。如果我给它2个月的两个条目,并给它一个Month.class的RegularTimePeriod,只显示两个带两个标签和两个值的条。如果我在几个月的时间里给它1000个小时,然后每小时显示一个标签和一个计数,依此类推

TimeSeries timeSeries = new TimeSeries(title, "Blah", "blah", clazz);  
// clazz is one of Day.class, Month.class, Hour.class 
for (final ReportRecord reportRecord : records) {
 int count = reportRecord.getCount();
 Date start = reportRecord.getDateRange().getStart();
 RegularTimePeriod period = null;
 switch (type) {
  case DAY: period = new Day(start);  break;
  case MONTH: period = new Month(start); break; 
  case HOUR: period = new Hour(start); break;
 }
 timeSeries.add(new TimeSeriesDataItem(period, count));
}
return new TimeSeriesCollection(timeSeries);
谢谢,,
Josh在我看来jfreechart是按照你的要求做的。例如,当你说:

“如果我选择小时,它按天显示数据,每天之间有许多条(即一天内有24条小条)。”

您提供的代码为每个小时的集合添加一个项目,因此为每个小时添加一个单独的小条是合适的

如果您将集合添加逻辑更改为仅在您决定的时间添加一个值(例如,每天午夜一次),则它应仅在图表中为所讨论的一天生成一个条形图

在过去,我只是简单地将值插入到最接近的秒(这不是您需要的精度),其余的由jfreechart处理,具体取决于您选择的时间尺度(编程或交互)

例如:

        TimeSeriesCollection dataset = new TimeSeriesCollection();
        TimeSeries series = new TimeSeries("Basal", Second.class);
        for (BasalRate basal : pInsulin.basals) {
            Second lSecond = new Second(basal.getTime());
            series.addOrUpdate(lSecond, basal.getValue());
        }
        dataset.addSeries(series);