图表系列点添加不与X轴同步

时间:2016-06-21 02:49:13

标签: c# charts highcharts series

我尝试通过C#绘制图表,表格为图片。 但是,正如您可以看到日期中的A4数据:7和8/6应保持相同的7和8/6 X轴,这里异常所有它们都留到5& 6/6 X轴。你能帮我解决一下吗?

enter image description here

for (int i = 0; i < 14; i++)
        {
            string productname = dataGridView1.Rows[i].Cells[0].Value.ToString();
            string datetime = dataGridView1.Rows[i].Cells[2].Value.ToString();
            int para = Convert.ToInt16(dataGridView1.Rows[i].Cells[1].Value);
            if (chart_dashboard.Series.IndexOf(productname) != -1)
            {
                chart_dashboard.Series[productname].Points.AddXY(datetime, para);
                chart_dashboard.ChartAreas[0].AxisX.Interval = 1;
            }
            else
            {
                chart_dashboard.Series.Add(productname);
                chart_dashboard.Series[productname].Points.AddXY(datetime, para);
                chart_dashboard.ChartAreas[0].AxisX.Interval = 1;
            }
        }

1 个答案:

答案 0 :(得分:4)

一个常见的错误。

string datetime = dataGridView1.Rows[i].Cells[2].Value.ToString();

这是错的!如果您将x值添加为字符串,则会将它们全部添加为 0 Series无法将它们与X轴上的正确插槽对齐。所以他们从左到右依次添加..

而是简单地将x值添加为它们应该是DateTimes

因此,如果Cells包含DateTime值,则使用:

DateTime datetime = (DateTime) dataGridView1.Rows[i].Cells[2].Value;

如果他们不这样做,请将其转换为DateTime

DateTime datetime = Convert.ToDateTime(dataGridView1.Rows[i].Cells[2].Value);

要控制x值类型,请为每个系列设置XValueType

chart_dashboard.Series[yourSeries].XValueType = ChartValueType.DateTime;

要控制轴标签的显示方式,请设置其格式:

chart_dashboard[ChartAreas[0].AxisX.LabelStyle.Format = someDateTimeFormatString;

要创建像“第1周”这样的字符串,您需要

  • XValueType设置为int16
  • 将x值添加为周数
  • 将其格式化为..axis.LabelStyle.Format = "Week #0";

从数据中按空格分割数字和Convert.ToInt16!

如果确实需要将稀疏x值作为字符串插入,则必须在系列的每个间隙处插入虚拟 DataPoint

创建虚拟DataPoint很简单:

 DataPoint dp = new DataPoint() { IsEmpty = true};

但要知道差距提前的挑战是挑战! “最佳”方式是在添加点之前检查数据并填写。或者稍后再讨论,而不是添加插入 dummys。两者都比首先获取数据要麻烦得多!