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的解决方案更简单,更灵活!)
这是一个例子:
设置一个包含三个 CharAreas
的Chart
后,设置Minima
和Maxima
以及为每个添加一个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.Position
和ChartArea.InnerPlotPosition
都称为“位置”,但实际上是指向相应容器 的百分比区域 !
所以我的例子的Left
距离为10%, Top
空间为5%, Width
为80%, Height
为90%。 其中Bottom
留出10%的空间, Right
留出5%的空间。 注意 :所有都是指ChartAreas
而不是Chart
的ClientArea
! (哪些仍然在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);