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

.net MSChart-自动缩放X轴上的Y轴缩放,.net,winforms,mschart,.net,Winforms,Mschart,我使用的是MSChart,我想在X轴上启用缩放,一旦缩放,我想Y轴自动缩放到适合于可查看数据的范围 如果您能提供任何帮助,我们将不胜感激 谢谢Microsoft提供了一个可供下载的。在示例应用程序中,有一个名为“可滚动外观”的应用程序,它似乎可以满足您的需要 用户可以选择和区域的图形,它将放大。它们还可以使用滚动条四处移动 下载中包含C示例代码。您想要进行的缩放无法由MSChart自动完成。从用户处检索到“放大”X值范围后,需要再编写一点代码以适当地重置Y轴缩放 如果您使用的是行样式的数据系列,

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

如果您能提供任何帮助,我们将不胜感激


谢谢

Microsoft提供了一个可供下载的。在示例应用程序中,有一个名为“可滚动外观”的应用程序,它似乎可以满足您的需要

用户可以选择和区域的图形,它将放大。它们还可以使用滚动条四处移动


下载中包含C示例代码。

您想要进行的缩放无法由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

我一直在寻找解决办法。我觉得这很有用。订阅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;
        }
    }

这不会根据用户选择的X值范围自动放大相应的Y值范围
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;
        }
    }