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

时间:2017-07-13 17:03:23

标签: c# .net winforms charts visualization

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

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

1 个答案:

答案 0 :(得分:4)

“最小显示范围”不是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轴将增长其显示范围以适应它们。如果您删除较大的点,它将缩小,但不低于虚拟系列所需的范围 ..:

enter image description here

请注意,由于Chart会自动添加一些松弛,因此1会减少双方的范围;与其他Intervals等需要其他数字..

删除较大值的代码,btw:

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