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