C#MSChart – 图表区域限制

我有一个图表和三个ChartArea在视图,缩放,光标中对齐: 这是我以前的相关post 。 除了三个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"; 

应指定总是五位数。 这在某种程度上缓解了这个问题,但并没有解决问题。 此外,对于这一行,程序在我滚动图形的任何时候开始抛出非常多的表单exception:

 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的大小。

(但Baddack的解决方案更简单,更灵活!)

这是一个例子:

设置一个包含三个 CharAreasChart后,设置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都称为“位置”,但实际上是指向相应容器 的百分比区域

所以我的例子的Left距离为10%, Top空间为5%, Width为80%, Height为90%。 其中Bottom留出10%的空间, 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);