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

目录

一、前言

二、效果图

三、窗体设计

四、数据库结构

五、折线图示例代码

六、柱状图示例代码

七、饼状图示例代码


一、前言

使用C#语言,在搭建客户端时,使用自带的Chart 控件生成折线图。

二、效果图

三、窗体设计

在窗体拖拽一个Chart控件和生成折线图button按钮,点击"生成折线图"按钮后,生成折线图

四、数据库结构

注意:日期字段类型是TEXT,存储的是YYYY-MM-DD HH:MM:SS格式。

五、折线图示例代码

在代码顶部引入using System.Windows.Forms.DataVisualization.Charting;

cs 复制代码
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);

}

图表的属性可以根据自己需求去修改。

六、柱状图示例代码

柱状图的窗体设计和折线图一样,点击"生成"按钮,下面生成柱状图。

cs 复制代码
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);
}

七、饼状图示例代码

饼状图的窗体设计和折线图一样,点击"生成"按钮,下面生成柱状图。

cs 复制代码
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);
}
相关推荐
ShineWinsu1 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
益莱储中国3 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
benchmark_cc4 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu4 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
CoderYanger4 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
估值探索者5 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
爱喝热水的呀哈喽6 小时前
HEJIAN RESEARCH
开发语言·matlab
白露与泡影6 小时前
后端 Java 面试核心八股汇总|高频面试题 + 解析,覆盖基础到进阶
java·开发语言·面试