JFreechart を使用して XYBarChart にデータを表示しようとしています。グラフには、カウントとともに時点が表示されます。したがって、ユーザーが範囲として 1 月 25 日と 3 月 25 日を選択した場合、チャートには特定の間隔でこれらの日付の間のデータが表示されます。
ユーザーが HOUR を選択した場合、1 月 25 日から 3 月 10 日までの 1 時間ごとのコレクションと、対応するカウントを作成します。当然、これは非常に大きなコレクションです。ユーザーが MONTH を選択した場合、ユーザーには 3 か月が表示されます (コレクションには 3 つのエントリのみ)。ユーザーが DAY を選択した場合、ユーザーには約 60 のエントリしか表示されません。分かりますか?
グラフを作成すると (データセットの生成に以下のコードを使用)、値が「補間」されます。時間を選択すると、日ごとのデータが表示され、各日の間に多くの棒が表示されます (つまり、1 日の間に 24 本の小さな棒が表示されます)。月を選択した場合でも、2 か月分の日が得られますが、その月のすべての日をカバーする 1 つの巨大なブロックが得られます。DAYを選べば良さそうです。
jfreecharts で値の補間を停止し、指定したデータに 1:1 でマッピングしてグラフを描画するにはどうすればよいですか。2 か月の 2 つのエントリを指定し、Month.class の RegularTimePeriod を指定すると、2 つのラベルと 2 つの値を持つ 2 つのバーだけが表示されます。数か月にわたって 1000 時間使用すると、1 時間ごとにラベルとカウントを表示するなど...
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);
ありがとう、ジョシュ