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

n00*_*les 3 .net c# charts visualization winforms

我有一个 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;
}
Run Code Online (Sandbox Code Playgroud)

这些都不起作用:

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
Run Code Online (Sandbox Code Playgroud)

我确定我错过了一些简单的东西。我希望无论如何我都有。

TaW*_*TaW 5

“最小显示范围”不是 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);
Run Code Online (Sandbox Code Playgroud)

根据需要设置 y 轴样式:

Axis ay = chart.ChartAreas[0].AxisY;
ay.MajorGrid.Interval = 5;
Run Code Online (Sandbox Code Playgroud)

并添加一个或多个数据 Series

sData = chart.Series.Add("data");
sData.LegendText = "Temperature";
sData.ChartType = SeriesChartType.Line;
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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

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

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