C#图表数据倒序排列:实现X轴周期和标记点从右往左显示
C#图表数据倒序排列:实现X轴周期和标记点从右往左显示本文将介绍如何使用C#在图表中将数据点和X轴标签倒序排列,使得最新的数据点显示在最右侧。### 问题描述在使用C#的Chart控件绘制图表时,默认情况下数据点是从左往右排列的。但有时我们需要将最新的数据点显示在最右侧,例如在显示时间序列数据时。### 解决方案要实现数据点和X轴标签的倒序排列,可以按照以下步骤进行操作:1. 数据排序: 在将数据绑定到图表之前,先将数据按照周期进行倒序排序。2. 数据行反转: 将数据绑定到图表之前,将DataTable中的数据行顺序反转。### 代码示例以下代码演示了如何使用DataTable存储数据,并将其绑定到Chart控件,同时实现数据点和X轴标签的倒序排列:csharpprivate void uiButton1_Click_1(object sender, EventArgs e){ string erpConnString = 'Server=192.168.1.180;initial catalog=DB_2015_20211029;user id=sa;password=gdzy5tgb6yhn;Connect Timeout=5'; DateTime selectedDate = uiDatePicker1.Value; // 创建一个DataTable来存储周期和合格率数据 DataTable dataTable = new DataTable(); dataTable.Columns.Add('周期', typeof(string)); dataTable.Columns.Add('合格率', typeof(double)); // 计算过去8个周期的起始日期和结束日期,并查询合格率数据 for (int i = 0; i < 8; i++) { DateTime startDate = selectedDate.AddDays(-(int)selectedDate.DayOfWeek + 1 - (i * 7)); DateTime endDate = startDate.AddDays(6); string period = $'{startDate.ToString('MM')}月第{GetWeekOfMonth(startDate)}周'; string query = $@'SELECT SUM(qty_chk) AS '送检量', SUM(qty_ok) AS '合格量', SUM(qty_lost) AS '不合格量' FROM tf_ty WHERE rk_dd >= '{startDate.ToString('yyyy-MM-dd')}' AND rk_dd <= '{endDate.ToString('yyyy-MM-dd')}''; using (SqlConnection connection = new SqlConnection(erpConnString)) { SqlCommand command = new SqlCommand(query, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); if (reader.Read()) { int qtyChk = Convert.ToInt32(reader['送检量']); int qtyOk = Convert.ToInt32(reader['合格量']); double passRate = (double)qtyOk / qtyChk * 100; // 将周期和合格率数据添加到DataTable中 dataTable.Rows.Add(period, passRate); } reader.Close(); } } // 按照周期进行倒序排序 dataTable.DefaultView.Sort = '周期 DESC'; dataTable = dataTable.DefaultView.ToTable(); // 将DataTable中的数据行顺序反转 dataTable.Rows.Reverse(); // 将DataTable中的数据填充到chart2的曲线图中 Chart chart2 = (Chart)((Control)sender).FindForm().Controls.Find('chart2', true)[0]; chart2.DataSource = dataTable; chart2.Series.Clear(); chart2.Series.Add('合格率'); chart2.Series['合格率'].XValueMember = '周期'; chart2.Series['合格率'].YValueMembers = '合格率'; chart2.Series['合格率'].ChartType = SeriesChartType.Line; chart2.Series['合格率'].BorderWidth = 3; // 设置曲线的边框宽度为3 chart2.Series['合格率'].IsValueShownAsLabel = true; // 显示标记标签 chart2.Series['合格率'].LabelFormat = '0.0//%'; // 标签格式 chart2.Series['合格率'].LabelForeColor = System.Drawing.Color.Black; // 设置标签字体颜色 chart2.Series['合格率'].LabelBackColor = System.Drawing.Color.Transparent; // 设置标签背景色为透明 chart2.Series['合格率'].Font = new System.Drawing.Font('Arial', 12); // 设置标签字号和字体 chart2.ChartAreas[0].AxisY.Minimum = 80; // 设置Y轴的最小值为80 chart2.ChartAreas[0].AxisY.Maximum = 120; // 设置Y轴的最大值为120 chart2.Series['合格率'].MarkerStyle = MarkerStyle.Circle; // 设置标记点的形状为圆形 chart2.Series['合格率'].MarkerColor = System.Drawing.Color.Red; // 设置标记点的颜色为红色 chart2.DataBind();}### 代码解释1. 我们首先创建一个DataTable来存储周期和合格率数据。2. 然后,我们计算过去8个周期的起始日期和结束日期,并从数据库中查询合格率数据。3. 在将数据添加到DataTable之后,我们使用dataTable.DefaultView.Sort = '周期 DESC';语句按照周期进行倒序排序,并使用dataTable = dataTable.DefaultView.ToTable();语句将排序后的结果保存回DataTable中。4. 接着,我们使用dataTable.Rows.Reverse();语句将DataTable中的数据行顺序反转。5. 最后,我们将DataTable绑定到Chart控件,并设置相关的图表属性。通过以上步骤,我们就可以实现数据点和X轴标签的倒序排列,将最新的数据点显示在最右侧。### 总结本文介绍了如何在C#图表中将数据点和X轴标签倒序排列,并提供了完整的代码示例。希望本文能够帮助您更好地使用C#进行数据可视化。
原文地址: https://www.cveoy.top/t/topic/kOG 著作权归作者所有。请勿转载和采集!