2013-03-14 22 views
5

私のアプリケーションでは、UI上に2つのグラフがあります(モニターの上部に近いほど)。両方のグラフの水平軸は、同じ時間範囲を参照します。それらの縦軸は非常に異なる可能性があるので、私はそれらをグラフとして保持したいと思います。彼らは相補的な情報を提供しています。そのため、縦軸ラベルがシフトする場合でも、横軸を同期させておきたいと思います。2つのチャートオブジェクトの間でチャートの垂直軸を整列する

どちらの場合も、これらを含むチャートコントロールは同じ幅を持ち、内部のデータだけがシフトされます。

私は現在、この持っている:

10000| 
8000| 
6000| 
4000| 
2000| 
    0 --------------------------------- 
     0        10 

Long Label 3| 
Long Label 2| 
Long Label 1| 
Long Label 0 ----------------------- 
      0     10 

を私はこれをしたい:

 10000| 
     8000| 
     6000| 
     4000| 
     2000| 
      0 --------------------------------- 
      0        10 

Long Label 3| 
Long Label 2| 
Long Label 1| 
Long Label 0 --------------------------------- 
      0        10 

彼らはもともと別のチャート、グラフ(MSChart)対照でした。私はそれらを異なるチャート領域と同じチャートコントロールに入れようとしましたが、問題を解決しませんでした。

これをどのように達成できますか?私はそれらを別々のチャートコントロールで好んでいるのが好きですが、もし私がそうしなければならないなら、私は別のチャートエリアで解決することができます。

答えて

3

私は結局答えを見つけました。私はまだ異なるチャートコントロールでそれを好きですが、同じチャートコントロール内の異なるチャートエリアの場合は、ChartArea.AlignWithChartAreaプロパティを使用できます。

//Say We have 2 Chart areas, one named "Main Info" and the other "Supplemental" 
chart1.ChartAreas["Supplemental"].AlignWithChartArea = "Main Info"; 
chart1.ChartAreas["Supplemental"].AlignmentOrientation = AreaAlignmentOrientations.Vertical; 
chart1.ChartAreas["Supplemental"].AlignmentStyle = AreaAlignmentStyles.All; 

そして、それは私が望むようにそれらを整列させます。

2

これは遅れてお答えしますが、この回答がほしい人のために書いてください。
私の答えは他のグラフを使用しています。

double x_position = chart1.ChartAreas[0].AxisX.ScaleView.Position; 
double x_size = chart1.ChartAreas[0].AxisX.ScaleView.Size; 
chart2.ChartAreas[0].AxisX.ScaleView.Zoom(x_position, x_position + x_size);  

リアルタイムシンクロでは、このコードをチャートイベントAxisViewChangedで使用します。一時としてリアルタイムシンクロ複数CharAreaについて

2

は言った:

private void chart1_AxisViewChanged(object sender, ViewEventArgs e) 
{ 
    foreach (var charArea in chart1.ChartAreas) 
    { 
     if (charArea != e.ChartArea) 
     { 
      double x_position = e.ChartArea.AxisX.ScaleView.Position; 
      double x_size = e.ChartArea.AxisX.ScaleView.Size; 
      charArea.AxisX.ScaleView.Zoom(x_position, x_position + x_size);  
     }     
    }    
} 
関連する問題