2

私は MSChart を使用しており、X 軸でズームを有効にしたいと考えています。これがズームされたら、Y 軸を表示可能なデータに適した範囲に自動ズームします。

問題に関するご支援をいただければ幸いです。

ありがとう

4

3 に答える 3

3

私は長い間解決策を探していました。これは便利だと思いました。AxisValueChanged イベントをサブスクライブし、ScaleView を使用してビューを変更します。

private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
    {
        if (e.Axis.AxisName == AxisName.X)
        {
            int start = (int)e.Axis.ScaleView.ViewMinimum;
            int end = (int)e.Axis.ScaleView.ViewMaximum;

            double[] temp = chart1.Series[0].Points.Where((x, i) => i >= start && i <= end).Select(x => x.YValues[0]).ToArray();
            double ymin = temp.Min();
            double ymax = temp.Max();

            chart1.ChartAreas[0].AxisY.ScaleView.Position = ymin;
            chart1.ChartAreas[0].AxisY.ScaleView.Size = ymax - ymin;
        }
    }
于 2011-12-07T04:02:48.993 に答える
2

必要な種類のズームは、MSChart では自動的に実行できません。ユーザーから「ズームイン」X 値の範囲を取得したら、Y 軸のスケーリングを適切にリセットするためにもう少しコードを記述する必要があります。

これは、データ シリーズの Line スタイルを使用していて、そのシリーズのソース データが SortedList として保存されている場合に最も簡単に機能します。

Dim firstXindex as Int32 = myDataSeries.IndexOfKey(firstXzoomValue)
Dim lastXindex as Int32 = myDataSeries.IndexOfKey(lastXzoomValue)    

Dim minY as Double = 1.7E+308
Dim maxY as Double = -1.7E+308  


For i = firstXindex To lastXindex
    If myDataSeries.GetByIndex(i) > maxY Then
        maxY = myDataSeries.GetByIndex(i)
    End If
    If myDataSeries.GetByIndex(i) < minY Then
        minY = myDataSeries.GetByIndex(i)
    End If
Next

上記のコードのようなものを使用して minY と maxY を取得したら、それらの値を使用して、ChartArea の Y 軸の最小値と最大値をリセットできます。

With myChartArea
  .AxisY.Maximum = maxY
  .AxisY.Minimum = minY
End With
于 2010-02-24T20:57:48.100 に答える
0

Microsoft は、さまざまなサンプルをダウンロードできるようにしています。サンプル アプリケーションには、Scrollable Appearanceと呼ばれるものがあります。

スクロール可能な外観 http://img502.imageshack.us/img502/5172/zoomablechart.png

ユーザーはグラフの領域を選択して拡大できます。また、スクロール バーを使用して移動することもできます。

C# サンプル コードは、ダウンロードに含まれています。

于 2010-02-05T10:21:55.097 に答える