【问题标题】:C# MSChart - charts area limitsC# MSChart - 图表区域限制
【发布时间】:2017-05-03 14:46:41
【问题描述】:

我有一个图表和三个图表区域,它们在视图、缩放、光标中对齐: this is my related previous 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";

应始终指定五位数字。这在某种程度上缓解了这个问题,但它并没有消失。此外,每当我滚动图表时,程序开始在下面抛出很多表单异常:

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

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

【问题讨论】:

  • 不幸的是,轴标签非常聪明,它们会修剪正常的空白。一个技巧是用 alt+255 空格左填充它们,但使用比例字体你仍然会有不同的宽度。另一个技巧是减少代码中的 ChartArea Size。为此,您需要找到一个很好的价值,即各方面要留下多少。这些值将取决于您要显示的所有内容,包括所有轴和标签以及图例。对于 3 个 CA,您可以以 ca.Position = new ElementsPosition(10, 70, 5, 23); 开头
  • - 嗯第二次认为这可能与 InnerPlotAreas 的大小有关。在这里,同样的做法也适用..

标签: c# mschart


【解决方案1】:

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

//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;

【讨论】:

  • 不错!我忘记了这些阵营。它工作正常,只要知道要与哪个对齐..
  • 感谢@Baddak 的支持
【解决方案2】:

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

(但是Baddack的方案更简单灵活!)

这是一个例子:

在设置Chart三个 CharAreas,设置MinimaMaxima 以及为每个DataPoint 添加一个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%。在 BottomRight 留下 10% 的空间和 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2020-06-30
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多