更改相同数据系列图表的X轴比例

时间:2016-06-10 01:44:39

标签: c# .net

我有一个图表区域和特定比例的特定位置来正确查看数据,我不想使用Autoscale

我想要的是,如果点> 'chart.ChartAreas [0] .AxisX.Maximum' 使用新的X轴刻度再次重新绘制该点。更改线条颜色,以便我可以识别其超量程

我的第一个比例0 --- 90 我的规模超过90 ---- 180

如你所见enter image description here
我想删除这一点,然后用90到180的红色线条再次绘制它,然后完成我的前进点正常

这就是我想要实现的目标enter image description here

这是我的代码我尝试了两个不同的系列,但没有工作,我错过了一些东西,我正在从csv文件中读取数据(nLines代表行号)

        for (int j = 0; j < nLines; j++)
        {

            chart.Series["Series0"].Points.AddXY(data[j, indX], data[j, indY]);


            chart.ChartAreas[0].AxisY.IsReversed = true;
            chart.ChartAreas[0].AxisX.Minimum = 0;
            chart.ChartAreas[0].AxisX.Maximum = 90;
            chart.Series["Series0"].Color = Color.Blue;
            chart.Series["Series0"].BorderWidth = 2;




            List<DataPoint> lst = chart.Series["Series0"].Points.ToList<DataPoint>();





                if (lst[j].XValue > 90)
                {


                    chart.Series["Series15"].ChartType = SeriesChartType.StepLine;
                    chart.Series["Series15"].Points.AddXY(data[j, indX], data[j, indY]);


                    chart.Series["Series15"].XAxisType = AxisType.Secondary;
                    chart.ChartAreas[0].AxisX2.Minimum = 90;
                    chart.ChartAreas[0].AxisX2.Maximum = 180;
                    chart.ChartAreas[0].AxisX2.MajorGrid.Enabled = false;
                    chart.ChartAreas[0].AxisX2.MinorGrid.Enabled = false;
                    chart.Series["Series15"].Color = Color.Red;
                    chart.Series["Series15"].BorderWidth = 2;

                }
        }

1 个答案:

答案 0 :(得分:2)

有多种方法可以做到这一点,但最简单的方法是使用技巧:

由于任何一个 Chartarea只能显示一个比例和值范围,我们使用两个 Chartareas叠加他们。

一个具有正常范围,另一个具有溢出范围。

现在我们将所有数据添加到两个系列:正常图表区域中的一个,以及溢出区域中的一个..

结果如下:

enter image description here

以下是准备Chart

的方法
ChartArea ca1 = chart1.ChartAreas[0];

// the regular axis label interval and range
ca1.AxisX.Interval = 10;
ca1.AxisX.Minimum = 0;
ca1.AxisX.Maximum = 100;

// we add an extra chartarea
ChartArea ca2 = chart1.ChartAreas.Add("ca2");
// we align it..
ca2.AlignmentOrientation = AreaAlignmentOrientations.All;
ca2.AlignWithChartArea = ca1.Name;
// ..but we also need to set the position
// we create a hard coded element position that leaves room for labels and legend
ca1.Position = new ElementPosition(0, 0, 80, 90);  // 80% width
ca2.Position = new ElementPosition(0, 0, 80, 90);  // 90% height
// we make the overlayed area transparent
ca2.BackColor = Color.Transparent;
// it needs a series to display the overflowing points
Series S22 = chart1.Series.Add("OverFlow");
S22.ChartType = SeriesChartType.StepLine;
S22.Color = Color.Red;
S22.ChartArea = "ca2";

其余的基本上只是造型轴。

// we want to show a secondary axis on top:
ca2.AxisX2.Enabled = AxisEnabled.True;
// don't disable the primary axis if you want any labels!
// instead make its labels transparent!
ca2.AxisX.LabelStyle.ForeColor = Color.Transparent;
// this is shared by the sec.axis event though it has its own property!
ca2.AxisX.LabelStyle.Interval = 10;
// I color the axis and the labels
ca2.AxisX2.LineColor = S22.Color;
ca2.AxisX2.LabelStyle.ForeColor = S22.Color;
// we need to set the range for both (!) axes:
ca2.AxisX2.Minimum = 100;
ca2.AxisX2.Maximum = 200;
ca2.AxisX.Minimum = 100;
ca2.AxisX.Maximum = 200;

现在,您可以将值添加到未修改的两个系列中。

我使用范围0-100和100-200。当然,你的工作也会奏效。另外:如果您不需要Legend,您可以将宽度从80%扩大到90%或更多..

这比在同一个图表区域中仅将溢出点添加到另一个系列要容易得多,因为看起来很好,还需要通过在恰当的位置添加透明的额外点来防止间隙和错误连接。