googleで
カスタム検索
プロフィール

けろ&ひな

Author:けろ&ひな
大阪在住。
親ばか。
最近、転職したよ。でも、やってることは一緒なんだけどね。;-P

最近の記事
カテゴリー
月別アーカイブ
最近のコメント
最近のトラックバック
スポンサード リンク

スポンサーサイト--------(--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[C#][Chart] Chart のX軸ラベルの位置2015-07-22(Wed)

MS Chartで グラフX軸のメモリの中間にラベルとグラフを表示したい。
ググってみた。。。。答えが見つからなかった。。。orz

リファレンスを眺めて考えた結果、解決した。

使用したプロパティは
    A.グラフの表示位置に影響
  1. ChartAreas[].AxisX.Interval
  2. ChartAreas[].AxisX.IntervalOffSet

    B.X軸メモリの表示位置に影響
  1. ChartAreas[].AxisX.LabelStyle.Interval
  2. ChartAreas[].AxisX.LabelStyle.IntervalOffset

      1. C.ラベルをずらす
      2. CustomLabelを使用する

      ポイントはAとBで値をずらしてやることでグラフとメモリの表示位置をずらすこと。
      そして、表示位置がずれることによりグラフの表示開始位置もずれるので
      AxisX.Minimum, AxisX.Maxmum もずらしてやる。


      具体的には
      chart.ChartAreas[0].AxisX.Minimum = -0.5;
      chart.ChartAreas[0].AxisX.Maximum = {DataCount}-0.5;
      chart.ChartAreas[0].AxisX.Interval = 1;
      chart.ChartAreas[0].AxisX.IntervalOffset = 1;
      chart.ChartAreas[0].AxisX.LabelStyle.Interval = 1;
      chart.ChartAreas[0].AxisX.LabelStyle.IntervalOffset = 0.5;

      これで、グラフの表示位置とメモリの表示位置がずれ、ちょうどメモリの真ん中に表示される。

      Interval と IntervalOffset の説明を読んでいろいろ試してみたら、LabelStyle の Interval と IntervalOffset は弄らなくてもできた。

      chart.ChartAreas[].AxisX.Minimum = -0.5;
      chart.ChartAreas[].AxisX.Maximum = {DataCount}-0.5;
      chart.ChartAreas[].AxisX.Interval = 1;
      chart.ChartAreas[].AxisX.IntervalOffset = 1;


      そもそも、 Axis の Interval と IntervalOffset だけで
      「ラベル、目盛り、またはグリッド線の Interval プロパティ値が NaN に設定されている、つまりこのプロパティが設定されていない場合に、軸に関連付けられたラベル、目盛り、およびグリッド線を描画する頻度を決定します」
      と説明されている。 さらに、ラベル位置を動かすだけなら CustomLabel を使用するだけでいいと。

      あとはラベルの表示位置をずらす。
      これには、"CustomLabel"を使用する。
      chart.ChartAreas[0].AxisX.CustomLabels.Add(new CustomLabel(from, to, "ラベル", rowIndex, LabelMarkStyle));

      メモリを中心にラベルを表示したい場合はfrom, to に 0.5 刻みで差をつけるといいらしい。(<=これはDeveloper Networkのhttps://msdn.microsoft.com/ja-jp/library/system.windows.forms.datavisualization.charting.customlabel.fromposition%28v=vs.110%29.aspxを参考にした。)
      なので、メモリの間に挟みたいなら、from, to を いじってあげればいい感じにできる。

      最初、これが分からずに、AxisLabel の文字列の最後に空白(スペース)を追加したり改行入れたりしてみたけど、ラベルでは前後のスペースは強制的に排除されるため徒労に終わった。。

      もう少し、情報がほしい。。。


      関連記事

コメントの投稿

管理者にだけ表示を許可する

コメント

工事中
RSSフィード
リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。