Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinForms图表:设置最小Y轴显示范围_C#_.net_Winforms_Charts_Visualization - Fatal编程技术网

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

C# WinForms图表:设置最小Y轴显示范围,c#,.net,winforms,charts,visualization,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)

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

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

MSChart控件中没有内置“最小显示范围”

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

添加一个仅包含两个点的虚拟
系列
,以确保显示范围不会低于其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;
并添加一个或多个数据
系列

sData = chart.Series.Add("data");
sData.LegendText = "Temperature";
sData.ChartType = SeriesChartType.Line;
现在,当您添加值范围更大的数据点时,y轴将增大其显示范围以适应它们。如果移除较大的点,它将收缩,但不低于虚拟序列所需的范围

请注意,由于
图表
自动添加了一些松弛,我将两侧的范围缩小了
1
;对于其他
间隔
等,需要其他数字

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

var toRemove = sData.Points.Cast<DataPoint>()
                    .Where(x => x.YValues[0] >= rangeMax).ToList();
foreach (var dp in toRemove) sData.Points.Remove(dp);
var toRemove=sData.Points.Cast()
其中(x=>x.yValue[0]>=rangeMax).ToList();
foreach(toRemove中的var dp)数据点移除(dp);

您可能正在谈论图表区域>轴>Y轴>缩放类别、最小和最大属性。
ScaleView
是关于缩放和滚动的。使用
chart1.ChartAreas[0].AxisY.Minimum
chart1.ChartAreas[0].AxisY.Maximum
@TaW我忘了提到那个-不起作用。我只是想确认一下,当然行了。但你可能做错了,或者有着可笑的期望。展示(真实的)代码并描述您得到的结果。我看到的东西没有编译。另外,除非您知道自己在做什么,否则不要设置ScaleView。尽可能多地使用自动(NaN)1.我认为这是一个不言自明的常见错误;-)-然后你会想,为什么它不存在,为什么没有人理解如果你认为你可以伪造你的目标:添加两个透明的虚拟点,而不是设置固定的最小值/最大值。给他们那些y值,可能是
0
20
。然后,当添加较大的值时,显示的范围将增大,如果删除它们,将再次缩小,但决不会低于虚拟范围。您可能需要为此创建一个虚拟系列;如果我还是不满意的话,我以后会再谈这个问题。
var toRemove = sData.Points.Cast<DataPoint>()
                    .Where(x => x.YValues[0] >= rangeMax).ToList();
foreach (var dp in toRemove) sData.Points.Remove(dp);