我尝试通过C#绘制图表,表格为图片。 但是,正如您可以看到日期中的A4数据:7和8/6应保持相同的7和8/6 X轴,这里异常所有它们都留到5& 6/6 X轴。你能帮我解决一下吗?
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;
}
}
答案 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
..axis.LabelStyle.Format = "Week #0";
从数据中按空格分割数字和Convert.ToInt16!
如果确实需要将稀疏x值作为字符串插入,则必须在系列的每个间隙处插入虚拟 DataPoint
。
创建虚拟DataPoint
很简单:
DataPoint dp = new DataPoint() { IsEmpty = true};
但要知道差距提前的挑战是挑战! “最佳”方式是在添加点之前检查数据并填写。或者稍后再讨论,而不是添加,插入 dummys。两者都比首先获取数据要麻烦得多!