none
microsoft chart controls for microsoft .net framework 3.5の折れ線グラフで任意のGrid値を表示するには RRS feed

  • 質問

  • Visual Studio C++ 2008 Professional + microsoft chart controls for microsoft .net framework 3.5を使用して、Windows フォームアプリケーション上に折れ線グラフの作成を行っております。

    具体的には、加速度センサ・角速度センサで計測した角度情報の変化を横軸に時間変化、縦軸に角度変化としてプロットしているのですが、ひととおりの描画は問題なく出来たのですが、Y軸方向の拡大・縮小を行った際に

    Gridの間隔や開始・終了の値が勝手に変化してしまい基準値として常に表示したいGridの値(-90度、0度、90度)がずれてしまいます。

    Y軸の最大値や、最小値を

    ChartAreas["エリアA"]->AxisY->Maximum = 任意の値;

    ChartAreas["エリアA"]->AxisY->Minimun = 任意の値;

    として自由に変更しつつ、表示範囲内にある、任意のGridの値を常に表示することはできないでしょうか。

     

    2011年7月27日 2:17

回答

すべての返信

  • IntervalOffset と Interval を指定するとよいと思います。
    (下記 URL は .NET Framework 4 のリファレンスですが、3.5 SP1 でも同様ですので気にしないでください。)

    Axis.IntervalOffset プロパティ (System.Windows.Forms.DataVisualization.Charting)
    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datavisualization.charting.axis.intervaloffset.aspx

    Axis.Interval プロパティ (System.Windows.Forms.DataVisualization.Charting)
    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datavisualization.charting.axis.interval.aspx
    • 回答としてマーク もんきー 2011年7月27日 7:00
    2011年7月27日 3:57
  • ありがとうございました、早速試してみることにします。

    解決しましたら、ここで報告させていただきます。

     


    tomohiro nishikiori
    2011年7月27日 4:23
  •  

    AxisY->IntervalOffset を 30に設定(0だと"Auto"の扱いのようなのでオフセットをシフトしました)

    AxisY->Interval を 15,

    AxisY->MajorGrid->IntervalOffsetも同じく30に設定したところ

    AxisY->Intervalも15に設定し、初回表示状態 及び AxisY->Maximunの操作には、Gridの表示が意図したとおりに追従してくれることが確認でしました。

    しかし、AxisY->Minimunを操作すると、操作した分だけオフセットの値がずれてしまうようです。

    AxisY->Minimunを -40 から -42に変更すると

    それまで。Y軸のGridで0の軸が表示されていたのに、-2を起点に 15刻みのGridが表示されてしまいます。

    もしかして、AxisY->Minimunの値とInterval関係のプロパティには何かしら関連があるのでしょうか・・・

    また、0以上のGridはY軸のMaximun,Minimunの変化に追従してくれるのに、0以下の値では、Gridが表示されないことがありました。

    具体例を挙げると

    Y軸最大値:35、最小値:-80の時に表示されたY軸のGridは

    30,15,0,-15,-30,-45,-75と、-60の表示が抜けていました。

    もう少し、調整してみますが、もし何かご存知の方がいましたらアドバイスをお願いします。

     


    tomohiro nishikiori
    2011年7月27日 5:45
  • Minimum を変更したら IntervalOffset も変更しないといけないですよ。起点になるので。
    Minimum を -40 から -42 に変更したのなら、IntervalOffset は 30 から 32 にしないといけないのでは。

    -60 が抜けるのは、ちょっと分かりません。すみません。
    • 回答としてマーク もんきー 2011年7月27日 6:34
    • 回答としてマークされていない もんきー 2011年7月27日 7:00
    2011年7月27日 5:58
  • ありがとうございます。

    >Minimum を変更したら IntervalOffset も変更しないといけないですよ。起点になるので。
    >Minimum を -40 から -42 に変更したのなら、IntervalOffset は 30 から 32 にしないといけないのでは。

    やはり、そういうことですよね

    そうすると、IntervalOffsetとIntervalだけでは、Gridの間隔を完全に制御することはできないようですね。

    Interval、IntervalOffsetと共に、IntervalOffsetの初期skip値のようなプロパティがないと完全にコントロールできないみたいですね

    グリッドが、0を起点としたn度刻みで表示されるよう常に制御したいのであれば、Minimunの値は常にnの倍数に調整しないと使えないようですね。

    Maximun/Minimunの操作にはNumericUpDownを使用していたので、こちらのIncrementプロパティをnに設定することで調整します。

    でも、やっぱり細かい部分では1度刻みで拡大・縮小したいですね。

    >-60 が抜けるのは、ちょっと分かりません。すみません。

    いえいえ、全然構いません。十分参考になるアドバイスが頂け助かりました。

    グラフを縦方向に複数並べていることもあり、複数グラフのChartArea自体の縦サイズが、小さいことも原因かもしれませんので

    出来る範囲で調整することにします。

    こちらで、質問させていただくのは今回が初めてだったのですが、問題が解決した際はどのようにクローズすればよいのでしょうか

     


    tomohiro nishikiori
    2011年7月27日 6:24