MSChart - X轴上的自动缩放Y轴缩放

时间:2010-01-13 23:35:41

标签: .net winforms mschart

我正在使用MSChart,我想在X轴上启用缩放,一旦缩放,我希望Y轴自动缩放到适合可查看数据的范围。

非常感谢任何有关此问题的帮助!

由于

3 个答案:

答案 0 :(得分: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;
        }
    }

答案 1 :(得分: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

答案 2 :(得分:0)

Microsoft已提供whole range of samples下载。在示例应用程序中,有一个名为 Scrollable Appearance ,它似乎可以满足您的需求。

Scrollable Appearance http://img502.imageshack.us/img502/5172/zoomablechart.png

用户可以选择图形区域并放大图像。它们也可以使用滚动条移动。

C#示例代码包含在下载中。