VerticalLineAnnotation 未显示在 RangeBar MSChart 上
VerticalLineAnnotation not displaying on RangeBar MSChart
一般信息:C#、WinForms。
我正在尝试创建某种程度上的时间线,在其中可视化生产过程的历史 and/or 计划数据。我这样做是使用 RangeBar 样式的 MSChart。我成功地根据个人要求配置了图表,并用正确的 X 和 Y 值填充了图表。
当可视化当前正在进行的过程时,我想在图表上显示一条与当前时间相对应的垂直线。通过 SO 搜索让我相信 VerticalLineAnnotation 对象将是实现这种可视化的最佳方式。但无论我尝试什么,我似乎都无法让 VerticalLineAnnotation 出现在屏幕上,无论我设置哪种属性组合。这是我的测试项目的代码,X 和 Y 值和点在这种情况下没有意义:
ChartArea ca = chart.ChartAreas.Add("CA");
Series s1 = chart.Series.Add("s1");
s1.ChartArea = ca.Name;
s1.ChartType = SeriesChartType.RangeBar;
s1.XValueType = ChartValueType.String;
s1.YValueType = ChartValueType.DateTime;
ca.AxisY.LabelStyle.Format = "HH:mm tt";
ca.AxisY.Maximum = DateTime.ParseExact("20-9-2017 9:20:00", "dd-M-yyyy H:mm:ss", null).ToOADate();
ca.AxisY.Minimum = DateTime.ParseExact("20-9-2017 8:10:00", "dd-M-yyyy H:mm:ss", null).ToOADate();
int pointIndex = chart.Series["s1"].Points.AddXY(2, DateTime.ParseExact("20-9-2017 8:13:45", "dd-M-yyyy H:mm:ss", null).ToOADate(), DateTime.ParseExact("20-9-2017 9:17:05", "dd-M-yyyy H:mm:ss", null).ToOADate() );
chart.Series["s1"].Points.Add(new DataPoint() { AxisLabel = "SO", XValue = 1, YValues = new double[] { DateTime.ParseExact("20-9-2017 8:13:01", "dd-M-yyyy H:mm:ss", null).ToOADate(), DateTime.ParseExact("20-9-2017 8:15:57", "dd-M-yyyy H:mm:ss", null).ToOADate() } });
chart.Series["s1"].Points.Add(new DataPoint() { AxisLabel = "SO", XValue = 1, YValues = new double[] { DateTime.ParseExact("20-9-2017 9:13:01", "dd-M-yyyy H:mm:ss", null).ToOADate(), DateTime.ParseExact("20-9-2017 9:15:57", "dd-M-yyyy H:mm:ss", null).ToOADate() } });
s1.Points[pointIndex].AxisLabel = "Hello";
s1.Points[pointIndex].Color = Color.Blue;
// Please ignore the different Points adding/altering style, I was experimenting a bit in my test project
(chart
在 Visual Studio Designer 中创建并声明为 private System.Windows.Forms.DataVisualization.Charting.Chart chart;
)
到这里为止,我的代码按预期工作,结果给出了以下图表:https://imgur.com/XUYhhC0.jpg(抱歉,由于信誉不佳,无法直接 post 图片)。
出于测试目的,我尝试使用以下代码在 8:45:00 上创建一个 VerticalLineAnnotation
:
VerticalLineAnnotation LA = new VerticalLineAnnotation();
LA.AxisX = ca.AxisX;
LA.AxisY = ca.AxisY;
LA.Y = DateTime.ParseExact("20-9-2017 8:45:00", "dd-M-yyyy H:mm:ss", null).ToOADate();
LA.LineWidth = 2;
LA.Height = ca.AxisY.Maximum - ca.AxisY.Minimum // Should span entire chart
LA.LineColor = Color.Red;
LA.ClipToChartArea = ca.Name;
chart.Annotations.Add(LA);
代码编译正常,但结果与上图相同:其中包含正确柱的 RangeBar 图表,但没有 VerticalLineAnnotation
.
的迹象
我觉得我没有设置重要的属性(我尝试将LA.Visible
设置为true,但它已经默认为true,所以没有什么区别)。我检查了文档,但这似乎没有任何地方表明 RangeBar 图表与 VerticalLineAnnotations 不兼容。我不知道还有什么要检查...
两期:
1 - 这只是一个打字错误(您想要最大 - 最小值,对吗?)..
LA.Height = ca.AxisY.Maximum - ca.AxisY.Maximum // Should span entire chart
但这也不是推荐的方式...要跨越整个图表区域,您可以使用
的组合
LA.IsInfinitive = true;
LA.ClipToChartArea = ca.Name;
2 - 你已经尝试了很多东西但是注释的x值,就像y一样,高度和宽度绝不是无关紧要的;您需要设置线的 x 位置,可能像这样将其与第一个点的起点对齐..:[=13=]
LA.X = chart.Series[0].Points[0].YValues[0];
一般信息:C#、WinForms。
我正在尝试创建某种程度上的时间线,在其中可视化生产过程的历史 and/or 计划数据。我这样做是使用 RangeBar 样式的 MSChart。我成功地根据个人要求配置了图表,并用正确的 X 和 Y 值填充了图表。
当可视化当前正在进行的过程时,我想在图表上显示一条与当前时间相对应的垂直线。通过 SO 搜索让我相信 VerticalLineAnnotation 对象将是实现这种可视化的最佳方式。但无论我尝试什么,我似乎都无法让 VerticalLineAnnotation 出现在屏幕上,无论我设置哪种属性组合。这是我的测试项目的代码,X 和 Y 值和点在这种情况下没有意义:
ChartArea ca = chart.ChartAreas.Add("CA");
Series s1 = chart.Series.Add("s1");
s1.ChartArea = ca.Name;
s1.ChartType = SeriesChartType.RangeBar;
s1.XValueType = ChartValueType.String;
s1.YValueType = ChartValueType.DateTime;
ca.AxisY.LabelStyle.Format = "HH:mm tt";
ca.AxisY.Maximum = DateTime.ParseExact("20-9-2017 9:20:00", "dd-M-yyyy H:mm:ss", null).ToOADate();
ca.AxisY.Minimum = DateTime.ParseExact("20-9-2017 8:10:00", "dd-M-yyyy H:mm:ss", null).ToOADate();
int pointIndex = chart.Series["s1"].Points.AddXY(2, DateTime.ParseExact("20-9-2017 8:13:45", "dd-M-yyyy H:mm:ss", null).ToOADate(), DateTime.ParseExact("20-9-2017 9:17:05", "dd-M-yyyy H:mm:ss", null).ToOADate() );
chart.Series["s1"].Points.Add(new DataPoint() { AxisLabel = "SO", XValue = 1, YValues = new double[] { DateTime.ParseExact("20-9-2017 8:13:01", "dd-M-yyyy H:mm:ss", null).ToOADate(), DateTime.ParseExact("20-9-2017 8:15:57", "dd-M-yyyy H:mm:ss", null).ToOADate() } });
chart.Series["s1"].Points.Add(new DataPoint() { AxisLabel = "SO", XValue = 1, YValues = new double[] { DateTime.ParseExact("20-9-2017 9:13:01", "dd-M-yyyy H:mm:ss", null).ToOADate(), DateTime.ParseExact("20-9-2017 9:15:57", "dd-M-yyyy H:mm:ss", null).ToOADate() } });
s1.Points[pointIndex].AxisLabel = "Hello";
s1.Points[pointIndex].Color = Color.Blue;
// Please ignore the different Points adding/altering style, I was experimenting a bit in my test project
(chart
在 Visual Studio Designer 中创建并声明为 private System.Windows.Forms.DataVisualization.Charting.Chart chart;
)
到这里为止,我的代码按预期工作,结果给出了以下图表:https://imgur.com/XUYhhC0.jpg(抱歉,由于信誉不佳,无法直接 post 图片)。
出于测试目的,我尝试使用以下代码在 8:45:00 上创建一个 VerticalLineAnnotation
:
VerticalLineAnnotation LA = new VerticalLineAnnotation();
LA.AxisX = ca.AxisX;
LA.AxisY = ca.AxisY;
LA.Y = DateTime.ParseExact("20-9-2017 8:45:00", "dd-M-yyyy H:mm:ss", null).ToOADate();
LA.LineWidth = 2;
LA.Height = ca.AxisY.Maximum - ca.AxisY.Minimum // Should span entire chart
LA.LineColor = Color.Red;
LA.ClipToChartArea = ca.Name;
chart.Annotations.Add(LA);
代码编译正常,但结果与上图相同:其中包含正确柱的 RangeBar 图表,但没有 VerticalLineAnnotation
.
我觉得我没有设置重要的属性(我尝试将LA.Visible
设置为true,但它已经默认为true,所以没有什么区别)。我检查了文档,但这似乎没有任何地方表明 RangeBar 图表与 VerticalLineAnnotations 不兼容。我不知道还有什么要检查...
两期:
1 - 这只是一个打字错误(您想要最大 - 最小值,对吗?)..
LA.Height = ca.AxisY.Maximum - ca.AxisY.Maximum // Should span entire chart
但这也不是推荐的方式...要跨越整个图表区域,您可以使用
的组合LA.IsInfinitive = true;
LA.ClipToChartArea = ca.Name;
2 - 你已经尝试了很多东西但是注释的x值,就像y一样,高度和宽度绝不是无关紧要的;您需要设置线的 x 位置,可能像这样将其与第一个点的起点对齐..:[=13=]
LA.X = chart.Series[0].Points[0].YValues[0];