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);