C# MSChart - 图表区域限制

C# MSChart - charts area limits

我有一个图表和三个图表区域,它们在视图、缩放和光标中对齐: 。除了三个 ChartArea 在开始时没有对齐外,一切都很好。以下是问题的图片:

我认为这取决于数字的 Y 值轴数。通过一些研究,我尝试了以下配置:

// selezione e zoom
dlChart.ChartAreas[VOLTAGE_AREA].CursorX.Interval = 1;
dlChart.ChartAreas[VOLTAGE_AREA].CursorX.IsUserEnabled = true;
dlChart.ChartAreas[VOLTAGE_AREA].CursorX.IsUserSelectionEnabled = true;
// generale
dlChart.ChartAreas[VOLTAGE_AREA].AxisX.LabelStyle.Format = "dd/MM/yy - HH:mm:ss.fff";       
dlChart.ChartAreas[VOLTAGE_AREA].AxisX.ScaleView.Zoomable = true;
dlChart.ChartAreas[VOLTAGE_AREA].AxisY.LabelStyle.Format = "D5";

在最后一行:

dlChart.ChartAreas[VOLTAGE_AREA].AxisY.LabelStyle.Format = "D5";

应始终指定五位数字。这在某种程度上减轻了问题,但它并没有消失。此外,对于这一行,每当我滚动图表时,程序都会开始抛出下面形式的很多异常:

Generate exception: 'System.FormatException' in mscorlib.dll

有谁知道这个问题的解决方案吗?提前致谢。

您是否尝试过使用图表区域对齐选项?我会尝试类似的东西:

//define inner plot position of the chart areas
dlChart.ChartAreas[0].InnerPlotPosition.Auto = true;
dlChart.ChartAreas[1].InnerPlotPosition.Auto = true;
dlChart.ChartAreas[2].InnerPlotPosition.Auto = true;

//set our second chart area's alignments to match our first chart area
dlChart.ChartAreas[1].AlignmentOrientation = AreaAlignmentOrientations.Vertical;
dlChart.ChartAreas[1].AlignmentStyle = AreaAlignmentStyles.All;
dlChart.ChartAreas[1].AlignWithChartArea = dlChart.ChartAreas[0].Name;

//set our third chart area's alignments to match our first chart area
dlChart.ChartAreas[2].AlignmentOrientation = AreaAlignmentOrientations.Vertical;
dlChart.ChartAreas[2].AlignmentStyle = AreaAlignmentStyles.All;
dlChart.ChartAreas[2].AlignWithChartArea = dlChart.ChartAreas[0].Name;

您可能想要控制 InnerPlotPosition 的大小。

(但巴达克的解决方案更简单、更灵活!)

这是一个例子:

三个 CharAreas 设置 Chart 后,设置 MinimaMaxima 并添加一个 DataPoint 给每个人我们得到这个:

您的问题很清楚。

InnerPlotPosition 设置为固定百分比后,它看起来像这样:

设置 InnerPlotPosition 大小的方法如下:

ca1.InnerPlotPosition = new ElementPosition(10, 5, 80, 90);
ca2.InnerPlotPosition = new ElementPosition(10, 5, 80, 90);
ca3.InnerPlotPosition = new ElementPosition(10, 5, 80, 90);

请注意 ChartArea.PositionChartArea.InnerPlotPosition 都称为 'Position' 但实际上是 百分比区域 指的是 各自的容器!

所以我的例子有 10% 的 Left 距离,5% 的 Top space 和 80% 的 Width 和 80% 的 Height 90%。 Bottom 有 10% space,Right 有 5%。 注意:都是指ChartAreas不是ChartClientArea! (仍处于 Auto,这使大小最大化。)

这是我的初始设置:

ChartArea ca1 = chart.ChartAreas[0];
ChartArea ca2 = chart.ChartAreas[1];
ChartArea ca3 = chart.ChartAreas[2];


Series s1 = chart.Series[0];
Series s2 = chart.Series.Add("Series2");
Series s3 = chart.Series.Add("Series3");

s2.ChartArea = ca2.Name;
s3.ChartArea = ca3.Name;

s1.Points.AddXY(1, 7);
s2.Points.AddXY(1, 777);
s3.Points.AddXY(1, Math.PI);