7

私のアプリケーションでは、UI上に上下に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

これらは元々、個別のChartMSChartコントロールでした。異なるチャート領域と同じチャートコントロールにそれらを配置しようとしましたが、問題は解決しませんでした。

どうすればこれを達成できますか?できれば別々のチャートコントロールでそれらを使用したいのですが、必要に応じて別々のチャート領域で解決することもできます。

4

3 に答える 3

4

私は最終的に答えを見つけました。それでも別のチャートコントロールで使用したいのですが、同じチャートコントロール内の異なるチャート領域である場合は、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;

そして、それは私が望んでいたようにそれらを並べます。

于 2013-03-14T20:47:15.237 に答える
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でこのコードを使用します。

于 2013-12-12T01:08:46.333 に答える
2

Tempが言ったように、リアルタイムシンクロの複数のCharAreaの場合:

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);    
        }                
    }            
}
于 2016-03-02T14:25:19.343 に答える