- PR -

JfreeChartの折れ線グラフ

1
投稿者投稿内容
あふち
会議室デビュー日: 2007/05/31
投稿数: 14
投稿日時: 2007-05-31 16:15
よろしくお願いします。

現在JfreeChartで折れ線グラフを表示させるツールを作成しています。
表示させるデータが複雑で、その表示方法につまっています。
グラフは

X軸 ある試験機の台数(台)
Y軸 試験時間(秒)

データは
計測1 100台-20秒
    200台-40秒
    300台-70秒
計測2 80台-55秒
    120台-100秒
計測3 150台-50秒
    250台-80秒
    350台-130秒
・・・
これらを1つの折れ線グラフを表示したいのですが、
X軸の値に対応するYの値があるかがバラバラで
これらをどうまとめていいのかわからずにいます。
計測1から順にDefaultCategoryDatasetにaddValueしていくと
X軸の値はバラバラになってしまい、折れ線グラフが横に3つ
並ぶ形になってしまいました。
うまく表示するためにはどういった手順でコーディングすれば
いいでしょうか?
どうぞよろしくお願いいたします。


あふち
会議室デビュー日: 2007/05/31
投稿数: 14
投稿日時: 2007-05-31 16:39
すみません。自己レスです。
XY chartというものがあるんですね。
まったくの勉強不足でした。
JFreeChartExampleを最後までしっかりチェックすべきでした。
すみょし
常連さん
会議室デビュー日: 2007/01/25
投稿数: 36
投稿日時: 2007-05-31 16:44
はじめまして。

JFreeChartのデモプラグ、jfreechart-1.0.5-demo.jarが手元にありましたら、
CrossHairDemo2.java
を見てみてください。

複数の要素を個別に配置して、Axisもその個数分配置しています。
DataSetを要素分Plotに設定すれば実現できます。
とりあえず、上記のコードを抜粋します。

コード:

private JFreeChart createChart()
{
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("Crosshair Demo 2", "Time of Day", "Value", null, true, true, false);
XYPlot xyplot = (XYPlot)jfreechart.getPlot();
XYDataset axydataset[] = new XYDataset[4];
for(int i = 0; i < 4; i++)
{
axydataset[i] = createDataset(i, "Series " + i, 100D + (double)i * 200D, new Minute(), 200);
if(i == 0)
{
xyplot.setDataset(axydataset[i]);
} else
{
xyplot.setDataset(i, axydataset[i]);
xyplot.setRangeAxis(i, new NumberAxis("Axis " + (i + 1)));
xyplot.mapDatasetToRangeAxis(i, i);
xyplot.setRenderer(i, new XYLineAndShapeRenderer(true, false));
}
}

jfreechart.addChangeListener(this);
jfreechart.addProgressListener(this);
jfreechart.setBackgroundPaint(Color.white);
xyplot.setOrientation(PlotOrientation.VERTICAL);
xyplot.setBackgroundPaint(Color.lightGray);
xyplot.setDomainGridlinePaint(Color.white);
xyplot.setRangeGridlinePaint(Color.white);
xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
xyplot.setDomainCrosshairVisible(true);
xyplot.setDomainCrosshairLockedOnData(false);
xyplot.setRangeCrosshairVisible(false);
XYItemRenderer xyitemrenderer = xyplot.getRenderer();
xyitemrenderer.setPaint(Color.black);
return jfreechart;
}




<追記>
あら、自己解決しちゃいました?でもとりあえずどうぞ。

[ メッセージ編集済み 編集者: すみょし 編集日時 2007-05-31 16:45 ]

[ メッセージ編集済み 編集者: すみょし 編集日時 2007-05-31 16:46 ]
あふち
会議室デビュー日: 2007/05/31
投稿数: 14
投稿日時: 2007-06-04 08:44
すみよしさん、ご丁寧にありがとうございました。
いろいろな実現方法を勉強してみたいと思います。
まだまだJAVA初心者なのでがんばります!
1

スキルアップ/キャリアアップ(JOB@IT)