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 轴缩放。

如果您使用数据系列的线条样式并且该系列的源数据存储为 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 回答