0

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);

ありがとう、ジョシュ

4

1 に答える 1

0

jfreechart は、あなたが尋ねたとおりにやっているようです。たとえば、次のように言うと:

「時間を選択すると、日ごとのデータが表示され、各日の間に多くの棒が表示されます (つまり、1 日の間に 24 本の小さな棒が表示されます)。」

指定したコードは、1 時間ごとにアイテムをコレクションに追加するため、1 時間ごとに個別の小さなバーが適切です。

ロジックを追加するコレクションを変更して、決定した時間にのみ値を追加する場合 (たとえば、1 日 1 回午前 0 時に)、問題の日のグラフに 1 つのバーのみが生成されます。

以前は、値を最も近い秒単位で突いただけでした (その精度は必要ありません)。あとは 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);
于 2009-09-28T08:24:05.770 に答える