- PR -

JfreeChartで縦軸を2つ設けたい

投稿者投稿内容
さく
ベテラン
会議室デビュー日: 2004/06/11
投稿数: 74
投稿日時: 2005-06-01 20:07

毎々お世話になっております。

JfreeChartで質問があります。

http://www.h7.dion.ne.jp/~matsu/feature/jfreechart/intro/timeseries_chart.html
のソースサンプルを参考に折れ線グラフを作成しています。

時間を横軸に、AとBの情報を同じグラフ(下記図参考までに)に
表示したいのですが、Bとグラフが紐づかず
Aと紐づいて悪戦苦闘しています。

    A B
    | / / |
    | / / |
    | / / |
    +----------+
    時間

チャート表示には、createTimeSeriesChart() を使用し、
同メゾットのパラメタのXYDatasetには、TimeSeriesCollection で
AとBの情報をセットしています。

上記メゾットの後に、Bのラベル表示を下記の通りに設定しましたが、
BのラベルとBの情報が紐づきませんでした。

###########################
XYPlot xyPlot = jfreeChart.getXYPlot() ;
final ValueAxis xAxis2 = new NumberAxis("B") ;
xyPlot.setRangeAxis(1, xAxis2) ;
###########################

紐付ける方法をご教示いただけないでしょうか?
ABの情報のセットは、先に示したURLのサンプルソースと
ほぼ同じです。
他サイトでサンプルを探しましたが情報が少なく悪戦苦闘しております。
宜しくお願いします。
さく
ベテラン
会議室デビュー日: 2004/06/11
投稿数: 74
投稿日時: 2005-06-01 20:10
追加。
図が崩れてしまったので補足します。

AとBは、それぞれ左右の縦軸のラベルです。
2つの情報を横軸の時間を共通にして
グラフに表示したいのです。

宜しくお願いします。
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2005-06-02 22:03
XYPlot.mapDatasetToRangeAxis で設定してください。
さく
ベテラン
会議室デビュー日: 2004/06/11
投稿数: 74
投稿日時: 2005-06-03 23:54
keisukeさん。早速の返答ありがとうございます。

なんとか紐付ける事ができました。

ありがとうございます。

ここで、もう一つ質問させて頂きたいのですが、

A軸とB軸に表示されるラベル値の間隔を任意の値に
したいのですが、ご存知の方、その方法をご教示いただけないでしょうか?

例)

A軸のデータが100〜300の範囲で設定すると
110、120、130の順に表示されます。
これを、40間隔で100、140、180....っと表示したいと
思っています。
(お客さんによっては、50間隔で表示して欲しいと言われるかも
しれないので、任意に指定できる状態にしておきたいと考えています。)

API見ながら、消去法でいろいろ試しているのですが、
なかなか思うようにいきません。

宜しくお願いします。
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2005-06-04 02:23
やったことがないのですが・・・

ValueAxis.setAutoTickUnitSelection(boolean) で false に指定した上で、
NumberAxis.setTickUnit(NumberTickUnit) で設定すれば良い様に思います。

だめなら、NumberAxis.getTickUnit() をオーバーライドですね。
さく
ベテラン
会議室デビュー日: 2004/06/11
投稿数: 74
投稿日時: 2005-06-05 22:47
keisukeさん、返答ありがとうございます。

なんとか、間隔を空ける事ができたのですが、
サンプル通りにならなくて悩んでいます。

AB軸をそれぞれ下記のようにしたいと思っています。

A軸:100〜300の値を持っていて、間隔が40で指定して
表示するラベル値を、100、140、180、220、260、300と
表示したく設定。
B軸:300〜800の値を持っていて、間隔が100で指定して
表示するラベル値を、300、400、500、600、700、800と
表示したく設定。

B軸は、思った通りの値になるのですが、
A軸は、120、160、200、240、280と表示されていまいました。

setAutoRangeなどをfalseにした状態で設定したり
いろいろ試みたのですが、うまくいきませんでした。

JfreeChartの仕様ではできないのでしょうか?
できないのであれば別の話になるのですが。可能でしょうか?
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2005-06-06 10:36
NumberAxis の calculateLowestVisibleTickValue を見ると、
Tick の整数倍になるように書かれています。
この仕様の方が好ましい気もしますが,直すなら
calculateLowestVisibleTickValue、calculateHighestVisibleTickValue、calculateVisibleTickCount をオーバーライドするか、
汎用性を求めないなら直接 refreshTicks をオーバーライドしてください。
さく
ベテラン
会議室デビュー日: 2004/06/11
投稿数: 74
投稿日時: 2005-06-07 23:57
keisukeさん。返答ありがとうございます。

早速、試してみましたが、理解不足のためうまくいきませんでした。

calculateLowestVisibleTickValueとcalculateHighestVisibleTickValue、
calculateVisibleTickCountには、私が思っている値で値が取得できました。
(それぞれ順に100、300、40)
どのようにして、オーバライドすれば宜しいのでしょうか?
ご教示いただけるとありがたいのですが。

同様に、refreshTicksメゾットも宜しくお願いします。
こちらは、ほとんど理解できませんでした。
サンプルらしきサンプルも皆無だったので。

以上、宜しくお願いします。

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