我一直在搜索一段时间,但仍然没有找到任何好的解决方案我的问题.我想使MS Chart在滚动时自动重新缩放Y轴,以确保所有数据点都可见.这里的扭曲是,我需要有能力排除某些系列被用于汽车秤.到目前为止,我只找到了解决方案,可以遍历AxisViewChanged事件的整个点集合,当您有大量的积分和一系列的迭代时,这种方法效果不佳.我想知道是否有任何方法通过获取当前可见的最小值和最大X值之间的数据点来缩小搜索范围.任何帮助将不胜感激.
编辑Heres图像.正如你可以看到中间的烛台不是完全可见的.
解决方法
你可以试试这个代码
DateTime date = DateTime.Now; chart1.ChartAreas[0].AxisX.Minimum = 0; chart1.ChartAreas[0].AxisX.Maximum = 20; Random r = new Random((int)date.Ticks); chart1.Series[0].ChartType = SeriesChartType.Candlestick; chart1.Series[0].Color = Color.Green; chart1.Series[0].XValueType = ChartValueType.Time; chart1.Series[0].IsXValueIndexed = true; chart1.Series[0].YValuesPerPoint = 4; chart1.Series[0].CustomProperties = "MaxPixelPointWidth=10"; for (int i = 0; i < 100; i++ ) { DataPoint point = new DataPoint(date.AddHours(i).ToOADate(),new double[] { r.Next(10,20),r.Next(30,40),r.Next(20,30),30) }); chart1.Series[0].Points.Add(point); } int min = (int)chart1.ChartAreas[0].AxisX.Minimum; int max = (int)chart1.ChartAreas[0].AxisX.Maximum; if (max > chart1.Series[0].Points.Count) max = chart1.Series[0].Points.Count; var points = chart1.Series[0].Points.Skip(min).Take(max - min); var minValue = points.Min(x => x.YValues[0]); var maxValue = points.Max(x => x.YValues[1]); chart1.ChartAreas[0].AxisY.Minimum = minValue; chart1.ChartAreas[0].AxisY.Maximum = maxValue;