如何绘制具有不同数据长度的两个系列

时间:2016-10-27 10:18:38

标签: c# charts

我有两个数据系列。第一个系列名为" DHA",第二个系列是" NNC"。 DHA的数据比NNC短(如图所示)。

当我使用C#在同一图表(Microsoft图表)上绘制它们时。如果绘图为真,则DHA系列必须向右移动到NNC,因为滞后于DHA的数据点。

但是,图片显示它们都出现在同一时间! 问题1:这里有什么问题? 问题2:如何沿X轴在特定点绘制每个系列?

1)数据:

string[] DHAX = new string[] {
            "2015-06-01", "2015-06-02", "2015-06-03", "2015-06-04", "2015-06-05", "2015-06-08", "2015-06-09", "2015-06-10", "2015-06-11", "2015-06-15",
            "2015-06-16", "2015-06-17", "2015-06-18", "2015-06-19", "2015-06-22", "2015-06-23", "2015-06-24", "2015-06-25", "2015-06-26", "2015-06-29",
            "2015-06-30", "2015-07-01", "2015-07-02", "2015-07-03", "2015-07-06", "2015-07-07", "2015-07-08", "2015-07-09", "2015-07-10", "2015-07-13",
            "2015-07-14", "2015-07-15", "2015-07-16", "2015-07-17", "2015-07-20", "2015-07-21", "2015-07-22", "2015-07-23", "2015-07-24", "2015-07-27",
            "2015-07-28", "2015-07-29", "2015-07-30", "2015-07-31", "2015-08-03", "2015-08-04", "2015-08-05", "2015-08-06", "2015-08-07", "2015-08-10",
            "2015-08-11", "2015-08-12", "2015-08-13", "2015-08-14", "2015-08-17", "2015-08-18", "2015-08-19", "2015-08-20", "2015-08-21", "2015-08-24",
            "2015-08-25", "2015-08-26", "2015-08-27", "2015-08-28", "2015-08-31", "2015-09-01", "2015-09-07", "2015-09-08", "2015-09-09", "2015-09-10",
            "2015-09-11", "2015-09-14", "2015-09-15", "2015-09-16", "2015-09-17", "2015-09-18", "2015-09-21", "2015-09-22", "2015-09-23", "2015-09-24",
            "2015-09-25", "2015-09-28", "2015-09-29", "2015-09-30", "2015-10-01", "2015-10-02", "2015-10-05", "2015-10-06", "2015-10-07", "2015-10-08",
            "2015-10-09", "2015-10-12", "2015-10-13", "2015-10-14", "2015-10-15", "2015-10-16", "2015-10-19", "2015-10-20", "2015-10-21", "2015-10-22",
            "2015-10-23", "2015-10-26", "2015-10-27" };
        double[] DHAY = new double[] {
            17.9, 17.9, 17.6, 17.6, 17.7, 17.5, 17.5, 17.5, 17.4, 17.5, 17.5, 17.5, 17.4, 17.4, 17.2, 17.1, 17.2, 17.1, 17.2, 17.3, 17.1, 17.1,
            17.1, 17.3, 17.3, 17.6, 17.6, 17.7, 18.8, 18.8, 18.4, 17.9, 18  , 17.9, 18  , 18.4, 18  , 18.2, 18.2, 18.1, 17.7, 18  , 17.8, 17.8,
            17.8, 17.8, 18.3, 18.3, 18.2, 18.3, 18.2, 18.1, 18  , 18.1, 18.1, 18  , 18  , 17.8, 17.8, 17.2, 17.3, 17.7, 17.4, 17.7, 17.6, 17.9,
            17  , 17  , 17  , 17  , 17  , 17  , 17  , 17  , 17.2, 17.3, 17.2, 17.2, 17  , 17  , 17  , 17.2, 17  , 17.1, 17.8, 18.7, 18.2, 18.7,
            18.1, 18.1, 17.9, 17.7, 18.5, 18.5, 18.1, 17.8, 17.9, 17.9, 17.9, 18.1, 18.1, 17.9, 17.8 };
        string[] NNCX = new string[] {
            "2015-05-25", "2015-05-26", "2015-05-27", "2015-05-28", "2015-05-29", "2015-06-01", "2015-06-02", "2015-06-03", "2015-06-04", "2015-06-05",
            "2015-06-08", "2015-06-09", "2015-06-10", "2015-06-11", "2015-06-15", "2015-06-16", "2015-06-17", "2015-06-18", "2015-06-19", "2015-06-22",
            "2015-06-23", "2015-06-24", "2015-06-25", "2015-06-26", "2015-06-29", "2015-06-30", "2015-07-01", "2015-07-02", "2015-07-03", "2015-07-06",
            "2015-07-07", "2015-07-08", "2015-07-09", "2015-07-10", "2015-07-13", "2015-07-14", "2015-07-15", "2015-07-16", "2015-07-17", "2015-07-20",
            "2015-07-21", "2015-07-22", "2015-07-23", "2015-07-24", "2015-07-27", "2015-07-28", "2015-07-29", "2015-07-30", "2015-07-31", "2015-08-03",
            "2015-08-04", "2015-08-05", "2015-08-06", "2015-08-07", "2015-08-10", "2015-08-11", "2015-08-12", "2015-08-13", "2015-08-14", "2015-08-17",
            "2015-08-18", "2015-08-19", "2015-08-20", "2015-08-21", "2015-08-24", "2015-08-25", "2015-08-26", "2015-08-27", "2015-08-28", "2015-08-31",
            "2015-09-01", "2015-09-07", "2015-09-08", "2015-09-09", "2015-09-10", "2015-09-11", "2015-09-14", "2015-09-15", "2015-09-16", "2015-09-17",
            "2015-09-18", "2015-09-21", "2015-09-22", "2015-09-23", "2015-09-24", "2015-09-25", "2015-09-28", "2015-09-29", "2015-09-30", "2015-10-01",
            "2015-10-02", "2015-10-05", "2015-10-06", "2015-10-07", "2015-10-08", "2015-10-09", "2015-10-12", "2015-10-13", "2015-10-14", "2015-10-15",
            "2015-10-16", "2015-10-19", "2015-10-20", "2015-10-21", "2015-10-22", "2015-10-23", "2015-10-26", "2015-10-27" };
        double[] NNCY = new double[] {
            50.5, 50.5, 51, 51, 51, 50.5, 51, 50.5, 50.5, 49.5, 50.5, 51, 51, 51, 50.5, 49.7, 51, 51, 51, 51, 50.5, 50.5, 49.6, 50.5, 50.5, 50.5, 50,
            50.5, 51, 50.5, 50.5, 50.5, 50, 50, 51, 50, 50, 50, 50, 51, 50.5, 54, 53, 52.5, 51, 51, 50.5, 51, 52.5, 51.5, 51.5, 51.5, 51.5, 52, 52, 52,
            49.3, 48.7, 48, 48, 48.1, 49.4, 49.4, 48.6, 47.8, 48.1, 51, 50, 48, 49.9, 49.1, 50.5, 51, 49.8, 49.8, 49.8, 51, 50, 50.5, 51.5, 51.5, 51.5,
            51, 51.5, 50.5, 51.5, 51.5, 51.5, 51.5, 51, 51.5, 52, 51, 51, 51, 51, 50.5, 51.5, 51, 51.5, 50.5, 50.5, 51.5, 54, 55, 55, 53.5, 54.5 };

2)在图表上绘制数据:

private void button1_Click(object sender, EventArgs e)
        {
            chart1.Series.Clear();
            chart1.Legends.Clear();
            chart1.Legends.Add(new Legend("Cross"));
            chart1.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;
            chart1.ChartAreas[0].AxisX.IsLabelAutoFit = true;
            chart1.ChartAreas[0].AxisX.MinorGrid.Enabled = false;
            chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
            chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
            //DHA Series
            chart1.Series.Add("DHA");
            chart1.Series["DHA"].ChartType = SeriesChartType.Line;
            chart1.Series["DHA"].XAxisType = AxisType.Primary;
            //NNC Series
            chart1.Series.Add("NNC");
            chart1.Series["NNC"].ChartType = SeriesChartType.Line;
            chart1.Series["NNC"].XAxisType = AxisType.Primary;
            //Draw DHA
            for (int dha = 0; dha < DHAX.Length; dha++)
            {
                chart1.Series["DHA"].Points.AddXY(DHAX[dha], DHAY[dha]);
            }
            //Draw NNC
            for (int nnc = 0; nnc < NNCX.Length; nnc++)
            {
                chart1.Series["NNC"].Points.AddXY(NNCX[nnc], NNCY[nnc]);
            }
        }

enter image description here

1 个答案:

答案 0 :(得分:0)

您要将x值添加为字符串。这是一个棘手的错误:生成的标签没问题,但所有 x值实际上都是0 ,因此这些点不能正确对齐既不在内部也不在整个系列中。尝试使用x值进行操作时也会出现其他问题,例如设置范围或格式化(丢失)值。

使用此选项可转换为List<DateTime>

List<DateTime> DHAX_list = null;

try
{
    DHAX_list = DHAX.Select(x => Convert.ToDateTime(x)).ToList();
}
catch {  /* do catch wrong date strings here!! */}

这是为了添加日期:

//Draw DHA
for (int dha = 0; dha < DHAX_list.Count; dha++)
{
    chart1.Series["DHA"].Points.AddXY(DHAX[dha], DHAY[dha]);
}

对两个系列都这样做,数据将按照它们的方式对齐。