资讯详情

【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图

📅 2026/10/21 2:35:45 | 华诺云谱 👁 阅读
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
目录一、前言二、效果图三、窗体设计四、数据库结构五、折线图示例代码六、柱状图示例代码七、饼状图示例代码一、前言使用C#语言在搭建客户端时使用自带的Chart控件生成折线图。二、效果图三、窗体设计在窗体拖拽一个Chart控件和生成折线图button按钮点击“生成折线图”按钮后生成折线图四、数据库结构注意日期字段类型是TEXT存储的是YYYY-MM-DD HH:MM:SS格式。五、折线图示例代码在代码顶部引入using System.Windows.Forms.DataVisualization.Charting;private void button1_Click(object sender, EventArgs e) { // ---------- 1.初始化图表 ------------- // 清空默认的图表区域和序列 chart1.ChartAreas.Clear(); chart1.Series.Clear(); chart1.Legends.Clear(); // ---------- 2.设置图表区域 ---------- ChartArea area new ChartArea(MainArea); //x轴设置 area.AxisX.Title 日期; area.AxisX.MajorGrid.LineColor Color.LightGray; // 纵向网格线 area.AxisX.LabelStyle.Format MM-dd; // 日期格式 area.AxisX.Interval 1; // 强制显示所有X轴标签 //y轴设置 area.AxisY.Title 数量; area.AxisY.MajorGrid.LineColor Color.LightGray; // 纵向网格线 area.AxisY.Minimum 0; // y轴最小值 chart1.ChartAreas.Add(area); // 设置图例 Legend legend new Legend(Legend1); legend.Docking Docking.Top; // 图例显示在上方 legend.Alignment StringAlignment.Center; // 居中显示 chart1.Legends.Add(legend); // ---------- 3.准备数据 ---------- string sql SELECT strftime(%Y-%m-%d, create_time) AS date, COUNT(*) AS count FROM user GROUP BY strftime(%Y-%m-%d, create_time) ORDER BY date ASC; DataTable dt SqliteHelper.ExecuteDataTable(sql); if (dt.Rows.Count 0) { MessageBox.Show(没有查到数据, 提示); return; } // 4.绑定数据到图表 // 创建数据序列 Series series new Series(每日新增); // 设置样式 series.ChartType SeriesChartType.Spline; // 设置为折线图 series.IsValueShownAsLabel true; // 开启数据点标签显示并显示Y轴的值 series.LabelFormat # 条; // 数值格式 series.BorderWidth 3; // 线条宽度 series.Color Color.DodgerBlue; // 线条颜色 // 数据点样式圆点 series.MarkerStyle MarkerStyle.Circle; //数据点形状 series.MarkerSize 8; // 数据点大小 series.MarkerColor Color.DodgerBlue; //数据点颜色 // 绑定数据源 series.Points.DataBind(dt.AsEnumerable(), date, count, ); // 把序列加到图表里 chart1.Series.Add(series); }图表的属性可以根据自己需求去修改。六、柱状图示例代码柱状图的窗体设计和折线图一样点击“生成”按钮下面生成柱状图。private void createBar_Click(object sender, EventArgs e) { // ---------- 1.初始化图表 ------------- // 清空默认的图表区域和序列 chart1.ChartAreas.Clear(); chart1.Series.Clear(); chart1.Legends.Clear(); // ---------- 2.设置图表区域 ---------- ChartArea area new ChartArea(MainArea); //x轴设置 area.AxisX.Title 日期; area.AxisX.MajorGrid.LineColor Color.LightGray; // 纵向网格线 area.AxisX.LabelStyle.Format MM-dd; // 日期格式 area.AxisX.Interval 1; // 强制显示所有X轴标签 //y轴设置 area.AxisY.Title 数量; area.AxisY.MajorGrid.LineColor Color.LightGray; // 纵向网格线 area.AxisY.Minimum 0; // y轴最小值 area.AxisX.LabelStyle.Angle -45; // 如果日期太长倾斜45度显示防止重叠 chart1.ChartAreas.Add(area); // ---------- 3.设置图例 ---------- Legend legend new Legend(Legend1); legend.Docking Docking.Top; // 图例显示在上方 legend.Alignment StringAlignment.Center; // 居中显示 chart1.Legends.Add(legend); // ---------- 4.准备数据 ---------- string sql SELECT strftime(%Y-%m-%d, create_time) AS date, COUNT(*) AS count FROM user GROUP BY strftime(%Y-%m-%d, create_time) ORDER BY date ASC; DataTable dt SqliteHelper.ExecuteDataTable(sql); if (dt.Rows.Count 0) { MessageBox.Show(没有查到数据, 提示); return; } // 5.绑定数据到图表 // 创建数据序列 Series series new Series(每日新增); // 设置样式 series.ChartType SeriesChartType.Column; // 设置为柱状图 series.IsValueShownAsLabel true; // 开启标签显示并显示Y轴的值 series.LabelFormat # 个; // 数值格式 series.Color Color.DodgerBlue; // 颜色 series[PointWidth] 0.6; // 柱子宽度占可用空间的60%避免挤在一起 // 绑定数据源 series.Points.DataBind(dt.AsEnumerable(), date, count, ); // 把序列加到图表里 chart1.Series.Add(series); }七、饼状图示例代码饼状图的窗体设计和折线图一样点击“生成”按钮下面生成柱状图。private void createPie_Click(object sender, EventArgs e) { // ---------- 1.初始化图表 ------------- // 清空默认的图表区域和序列 chart1.ChartAreas.Clear(); chart1.Series.Clear(); chart1.Legends.Clear(); // ---------- 2.设置图表区域 ---------- ChartArea area new ChartArea(MainArea); chart1.ChartAreas.Add(area); // ---------- 3.设置图例 ---------- Legend legend new Legend(Legend1); legend.Docking Docking.Right; // 图例显示在右侧 legend.Alignment StringAlignment.Center; // 居中显示 chart1.Legends.Add(legend); // ---------- 4.准备数据 ---------- string sql SELECT CASE status WHEN 1 THEN 开启 WHEN 2 THEN 关闭 ELSE 未知 END AS status_text, COUNT(*) AS count FROM user GROUP BY status; DataTable dt SqliteHelper.ExecuteDataTable(sql); if (dt.Rows.Count 0) { MessageBox.Show(没有查到数据, 提示); return; } // 5.绑定数据到图表 // 创建数据序列 Series series new Series(状态占比); // 设置样式 series.ChartType SeriesChartType.Pie; // 设置为饼状图 series.Label #VALX#PERCENT{P1}; // 名称百分比。#VALX显示X轴的文字#VAL显示原始数值{P1}保留1位小数的百分比如45.5% series.IsValueShownAsLabel true; // 开启标签显示并显示Y轴的值 //series.Palette ChartColorPalette.Pastel; // 设置不同扇形颜色 series[Exploded] true; // 让饼图稍微分离 // 绑定数据源 series.Points.DataBind(dt.AsEnumerable(), status_text, count, ); // 把序列加到图表里 chart1.Series.Add(series); }
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑