繁体   English   中英

Winform MsChart辅助轴和带状线

[英]Winform MsChart secondary axis and stripline

我在Winform中绘制MSChart存在一些问题。

  1. 我无法获得图表右侧显示的Y2轴值,这应该是默认值-类似于此问题
  2. 带状线不会显示,并且
  3. 是否可以将轴Y1和Y2的零值对齐?

    谢谢你的帮助。

      ChartArea TestChartArea = new ChartArea(); public void CreateChartArea() { TestChartArea.Name = "TestChartArea"; TestChartArea.BackColor = Color.LightGreen; TestChartArea.Position = new ElementPosition { Height = 100, Width = 80, X = 2, Y = 5 }; //TestChartArea.Position = new ElementPosition { Auto = true }; TestChartArea.AxisY = new Axis { Enabled = AxisEnabled.True, IsLabelAutoFit = true, IsMarginVisible = true, LabelStyle = new LabelStyle { Format = "P2", ForeColor = Color.DarkBlue, Font = new Font("Arial", 10, FontStyle.Regular) }, LineColor = Color.Black, MajorGrid = new Grid { LineColor = Color.White, LineDashStyle = ChartDashStyle.Solid }, MajorTickMark = new TickMark { LineColor = Color.Black } }; TestChartArea.AxisY2 = new Axis { Enabled = AxisEnabled.True, IsLabelAutoFit = true, IsMarginVisible = true, LabelStyle = new LabelStyle { Format = "P2", ForeColor = Color.DarkBlue, Font = new Font("Arial", 10, FontStyle.Regular) }, LineColor = Color.Transparent, MajorGrid = new Grid { LineColor = Color.Yellow, LineDashStyle = ChartDashStyle.Solid }, MajorTickMark = new TickMark { LineColor = Color.Blue } }; TestChartArea.AxisX = new Axis { Enabled = AxisEnabled.True, Crossing = 0, LineWidth = 1, IsLabelAutoFit = true, IsMarginVisible = false, LabelStyle = new LabelStyle { Angle=-45,Format = "N0", ForeColor = Color.Black, Font = new Font("Arial", 8, FontStyle.Regular) }, LineColor = Color.Black, MajorGrid = new Grid { LineColor = Color.White, LineDashStyle = ChartDashStyle.Solid }, MajorTickMark = new TickMark { LineColor = Color.LightGray, Size = 4.0f }, Name="Spot" }; } public void PlotChart() { int[] Xseries = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; double[] AXJO = { 0.0025, 0.0015, -0.001, 0.002, 0.0045, -0.002, -0.003, 0.0001, -0.004, -0.0075 }; double[] ES = { 0.0020, 0.0010, -0.0005, 0.003, 0.0025, -0.001, -0.0015, 0.0005, -0.0032, -0.006 }; double[] Diff = new double[10]; // pair return for (int i = 0; i < 10; i++) { Diff[i] = AXJO[i] - ES[i]; } TestChart.BackColor = Color.LightGoldenrodYellow; TestChart.BackSecondaryColor = Color.LightBlue; if (TestChart.Series.IsUniqueName("AXJO")) { TestChart.Series.Add("AXJO"); TestChart.Series["AXJO"].YAxisType = AxisType.Primary; TestChart.Series["AXJO"].Color = Color.Green; TestChart.Series["AXJO"].ChartType = SeriesChartType.Line; TestChart.Series["AXJO"].Points.DataBindXY(Xseries, AXJO); TestChart.Series["AXJO"].ChartArea = "TestChartArea"; } if (TestChart.Series.IsUniqueName("ES")) { TestChart.Series.Add("ES"); TestChart.Series["ES"].YAxisType = AxisType.Primary; TestChart.Series["ES"].Color = Color.Red; TestChart.Series["ES"].ChartType = SeriesChartType.Line; TestChart.Series["ES"].Points.DataBindXY(Xseries, ES); TestChart.Series["ES"].ChartArea = "TestChartArea"; } if (TestChart.Series.IsUniqueName("Diff")) { TestChart.Series.Add("Diff"); TestChart.Series["Diff"].YAxisType = AxisType.Secondary; TestChart.Series["Diff"].Color = Color.Blue; TestChart.Series["Diff"].ChartType = SeriesChartType.Line; TestChart.Series["Diff"].Points.DataBindXY(Xseries, Diff); TestChart.Series["Diff"].ChartArea = "TestChartArea"; } } public void AddStripLine() { // add stripline at Diff=zero StripLine ZeroDiff = new StripLine(); ZeroDiff.ForeColor = Color.Black; ZeroDiff.BackColor = Color.Black; ZeroDiff.StripWidth = 1; ZeroDiff.BorderWidth = 2; ZeroDiff.Interval = 0; ZeroDiff.IntervalOffset = 10; TestChart.ChartAreas["TestChartArea"].AxisY2.StripLines.Add(ZeroDiff); } private void button1_Click(object sender, EventArgs e) { PlotChart(); AddStripLine(); } } 

在此处输入图片说明

您通过将AxisY2Crossing属性设置为0来询问关于AxisY2不必要的放置的信息

只需不设置它,然后将其double.NaN为默认的double.NaN ,即可将其自动放置在右侧即可解决此问题。

Crossing = double.NaN

要显示带状线,它必须在其轴的可见范围内开始。 将其偏移10可能会超出您的数据范围。也可能不希望将其设置为黑色,除非您只希望使用细线而不是彩色区域。

StripLines的基本规则是:

  • Interval = 0只有一个带状线被示出在IntervalOffset用的宽度/高度StripWidth
  • 当“ Interval > 0 ,显示了许多带状线,它们遍及整个轴; 除非您具有半透明的颜色,否则需要确保StripWidth < Interval否则它们之间没有空格!
  • 所有度量均以轴值表示; 可以使用StripWidthTypeIntervalType设置类型; 在使用DateTime单位之一时特别有用。

要使两个y轴的0值对齐,您需要调整一个或两个轴的“ Minimum和/或“ Maximum 这可能有些棘手,您可能需要查看数据并完全控制间距和放置轴标签。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM