C#图表的使用

需要的对象之一:两个数据的封装

1.显示的文本(地区、姓名、月份....)

2.显示的数据

需要的对象之二:具体图表控件的各种属性设置

主要是封装方法。

创建一个SuperChart类

 /// <summary>
    /// 高级图表设置类
    /// </summary>
    public class SuperChart
    {
        //当前要使用的图表控件对象
        private Chart chart = null;
        public SuperChart(Chart chart)
        {
            this.chart = chart;
        }

        /// <summary>
        /// 绘制图表的通用方法
        /// </summary>
        /// <param name="chartType">图表显示的类型</param>
        /// <param name="dataList">图表所需要的数据</param>
        public void ShowChart(SeriesChartType chartType, List<ChartData> dataList)
        {
            //【1】清除所有的图表序列
            this.chart.Series.Clear();

            //【2】创建一个图表序列对象(一个图表,可以添加多个图表序列,也就是绘图对象)
            Series series1 = new Series();
            series1.ChartType = chartType;//设置图表序列对象显示的类型
            this.chart.Series.Add(series1);//添加到图表序列集合

            //【3】设置当前图表序列的各种属性值
            for (int i = 0; i < dataList.Count ; i++)
            {
                //3.1 获取数据对象的两个值
                string text = dataList[i].Text;
                double value = dataList[i].Value;

                //3.2 使用x和y的值将DataPoint对象添加进去
                series1.Points.AddXY(text, value);

                //3.3 设置数据点显示内容
                series1.Points[i].LabelToolTip = value.ToString();//鼠标放到标签上面的提示
                series1.Points[i].ToolTip = value.ToString();//图形上面的提示

                //3.4 根据图形样式设置显示的形式和内容
                if (chartType == SeriesChartType.Pie)
                {
                    // series1.Points[i].Label = "#AXISLABEL(#VAL)";//设置标签显示的内容=X轴内容+value
                    series1.Points[i].Label = "#AXISLABEL(#PERCENT)";//X轴+百分比
                                                                     // series1.Points[i].Label = "#AXISLABEL(#VAL)(#PERCENT)";
                    series1["PieLabelStyle"] = "Outside"; //在外侧显示Lable
                                                          // series1["PieLabelStyle"] = "Inside";
                    series1["PieLineColor"] = "Black";//绘制连线
                }
                else if (chartType == SeriesChartType.Doughnut)//圆环图
                {
                    series1.Points[i].Label = "#AXISLABEL   (#PERCENT)";
                    series1["PieLabelStyle"] = "Inside";
                }
                else //如果是其他图形,显示百分比或数值
                {
                    series1.Points[i].Label = "(#PERCENT)";
                }
                if (chartType != SeriesChartType.Pie)
                {
                    series1.Points[i].AxisLabel = string.Format("{0} {1}", text, value);
                }
            }
            //【4】设置图表绘图区域的X和Y坐标值(Y:表示具体要显示的数值之间的间隔)
            this.chart.ChartAreas[0].AxisY.Interval = 10;//也可以设置成20
            this.chart.ChartAreas[0].AxisX.Interval = 1; //一般都设置为1
        }
    }

创建一个chartData类

 /// <summary>
    /// Chart数据实体类
    /// </summary>
     public class ChartData
    {
        public ChartData()
        {

        }
        public ChartData(string text,double value)
        {
            this.Text = text;
            this.Value = value;
        }
        /// <summary>
        /// 显示的文本
        /// </summary>
        public string Text { get; set; }
        /// <summary>
        /// 显示的值
        /// </summary>
        public double Value { get; set; }
    }

测试数据

public partial class Form1 : Form
    {
        private SuperChart superChart = null;
        private List<ChartData> dataList = new List<ChartData>();//用来保存数据的集合
        public Form1()
        {
            InitializeComponent();
            //初始化自定义图表设置对象
            superChart = new SuperChart(this.chart1);
            Init();//实际开发中,可以从数据库或其他数据源查询
        }
        private void Init()
        {
            //创建一个随机数用来生成数据
            Random random = new Random();
            dataList.Add(new ChartData("男生", 100));
            dataList.Add(new ChartData("女生", 200));
            dataList.Add(new ChartData("机器人", 100));
        }
        private void btnPie_Click(object sender, EventArgs e)
        {
            this.superChart.ShowChart(SeriesChartType.Pie, dataList);
        }

        private void btnColumn_Click(object sender, EventArgs e)
        {
            this.superChart.ShowChart(SeriesChartType.Column , dataList);
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_37589387/article/details/88597391