WinForms图表:设置最小Y轴显示范围

我有一个Winforms图表,其中我有温度读数到达并显示每秒。 我喜欢图表自动处理值显示的方式,但我想改变一件简单的事情

我想增加最小显示的y轴范围,因此它显示的范围为20.目前它只显示在5左右。我尝试了一些事情:

//(when new data arrives...) //Does not work, I think because by default, Size is always NaN? if (chart1.ChartAreas[0].AxisY.ScaleView.Size < 20) { chart1.ChartAreas[0].AxisY.ScaleView.Size = 20; } 

这些都不起作用:

 chart1.ChartAreas[0].AxisY.ScaleView.SmallScrollMinSize = 20; chart1.ChartAreas[0].AxisY.ScaleView.SmallScrollSize = 20; chart1.ChartAreas[0].AxisY.ScaleView.MinSize = 20; chart1.ChartAreas[0].AxisY.Minimum //doesn't seem to have any effect chart1.ChartAreas[0].AxisY.Maximum //doesn't seem to have any effect 

我确定我错过了一些简单的事情。 无论如何我希望我有。

“最小显示范围”不是MSChart控件中内置的内容。

但你很容易伪造它:

添加一个仅包含两个点的虚拟 Series ,以确保显示范围不会低于其y值的范围..:

 int rangeMin = -10; int rangeMax = 20; sDummy = chart.Series.Add("dummy"); sDummy.Color = Color.Transparent; sDummy.IsVisibleInLegend = false; sDummy.ChartType = SeriesChartType.Point; sDummy.Points.AddXY(0, rangeMin + 1); sDummy.Points.AddXY(0, rangeMax - 1); 

根据需要设置y轴的样式:

 Axis ay = chart.ChartAreas[0].AxisY; ay.MajorGrid.Interval = 5; 

并添加一个或多个数据 Series

 sData = chart.Series.Add("data"); sData.LegendText = "Temperature"; sData.ChartType = SeriesChartType.Line; 

现在,当您添加具有更大范围值的数据点时,y轴将增大其显示范围以适应它们。 如果你移除较大的点,它将收缩 ,但不低于虚拟系列所需的范围 ..:

在此处输入图像描述

请注意,由于Chart自动添加了一些松弛,我将两边的范围缩小了1 ; 与其他Intervals等需要其他数字..

删除较大值的代码,btw:

 var toRemove = sData.Points.Cast() .Where(x => x.YValues[0] >= rangeMax).ToList(); foreach (var dp in toRemove) sData.Points.Remove(dp);