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
后,设置 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
都称为 'Position' 但实际上是 百分比区域 指的是 各自的容器!
所以我的例子有 10% 的 Left
距离,5% 的 Top
space 和 80% 的 Width
和 80% 的 Height
90%。 Bottom
有 10% space,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);
我有一个图表和三个图表区域,它们在视图、缩放和光标中对齐:
我认为这取决于数字的 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
后,设置 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
都称为 'Position' 但实际上是 百分比区域 指的是 各自的容器!
所以我的例子有 10% 的 Left
距离,5% 的 Top
space 和 80% 的 Width
和 80% 的 Height
90%。 Bottom
有 10% space,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);