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

WinForms Chart: Set minimum Y Axis display range

我有一个 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;
}

None 这些作品之一:

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

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

'minimum display range' 不是 MSChart 控件中内置的东西。

但你可以很容易地伪造它:

添加一个dummy Series,其中只包含两个点,以确保显示范围不会低于范围他们的 y 值..:[=​​20=]

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轴将扩大其显示范围以适应它们。如果你删除较大的点,它将收缩,但不低于范围虚拟系列..:[=​​20=]

请注意,由于 Chart 会自动添加一些 slack,因此我将两侧的范围缩小 1;与其他 Intervals 等需要其他数字..

删除较大值的代码,顺便说一下:

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