Chart用法详解

实际的开发过程中chart是可以自己使用gdi来自己画的,但是处理特殊情况可能还是不如系统自带的控件。花了一天的时间研究了一下chart。把一些基本的功能算是研究明白了,主要是折线的显示,用于数据分析,增加参考线,超警戒线区分显示,离散点/点线连接基本满足需要了。

上硬菜(想用的可以修改一下使用,勿喷):

Chart主要属性:

ChartArea:在容器内创建多个Chart表

Series:设置多组数据的显示(比如一个Chart里面可以出现多条折线)

Title:设置Chart的标题属性

Legends:设置每组数据的标签属性

效果图:

 

建立一个Form窗体,在Series属性里面增加三个Series

//创建数据

private DataTable CreateDataTable()

{
    DataTable dt=new DataTable();
    dt.Columns.Add("date");
    dt.Columns.Add("Volume1");
    dt.Columns.Add("Volume2");
    dt.Columns.Add("Volume3");
    
    DataRow dr;

    dr=dt.NewRow();
    dr["date"]="Jans";
    dr["Volume1"]=10000;
    dr["Volume2"]=4101;
    dr["Volume3"]=101;
    dt.Rows.Add(dr);

    dr=dt.NewRow();
    dr["date"]="Feb";
    dr["Volume1"]=20000;
    dr["Volume2"]=4101;
    dr["Volume3"]=1101;
    dt.Rows.Add(dr);
    
    dr=dt.NewRow();
    dr["date"]="Mar";
    dr["Volume1"]=10000;
    dr["Volume2"]=7101;
    dr["Volume3"]=2101;
    dt.Rows.Add(dr);
    
    dr=dt.NewRow();
    dr["date"]="Apr";
    dr["Volume1"]=20000;
    dr["Volume2"]=6101;
    dr["Volume3"]=3101;
    dt.Rows.Add(dr);

    dr=dt.NewRow();
    dr["date"]="May";
    dr["Volume1"]=10000;
    dr["Volume2"]=7101;
    dr["Volume3"]=5101;
    dt.Rows.Add(dr);

    dr=dt.NewRow();
    dr["date"]="Jun";
    dr["Volume1"]=20000;
    dr["Volume2"]=8101;
    dr["Volume3"]=1101;
    dt.Rows.Add(dr);

    return dt;
}

 

private void Form1_Load(object sender,EventArgs e)
{
    DataTable dt=new DataTable ();
    dt=CreateDataTable ();

    //设置Chart的数据源
    chart1.DataSource=dt;
    //设置图标Y轴的对应项
    chart1.Series[0].YValueMembers="Volume1";
    chart1.Series[1].YValueMembers="Volume2";
    chart1.Series[2].YValueMembers="Volume3";

    //设置X轴的对应项
    chart1.Series[1].XValueMember="date";
    //绑定数据
    chart1.DataBind();
    
    //设置网格的颜色
    chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineColor=Color.LightGreen;
    chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineColor=Color.LightBlue;
    
    //绘制警戒线
    StripLine stripLine=new StripLine();
    stripLine.Interval=0;
    stripLine.IntervalOffset=18000.0;
    stripLine.StripWidth=1;
    stripLine.BackColor=Color.Red;
    stripLine.BorderDashStyle=ChartDashStyle.Dash;
    stripLine.Text="警戒线标识";
    chart1.ChartAreas["ChartArea1"].AxisY.StripLines.Add(stripLine);
    
    #region 先设置为散点法显示(超出警戒线的点显示为红色,如果散点显示则使用这种判断方式)
    // foreach(DataPoint point in chart1.Serier[0].Points)
    //{
    //    if(point.YValues[0]>15000)
    //        point.Color=Color.Red;
    //}
    #endregion

    #region 先设置为折线显示(然后设置折线拐点的大小与Style)
    //设置线条的粗细
    chart1.Series[0].BorderWidth=2;
    //标记显示点的颜色
    chart1.Series[0].MarkerBorderColor=Color.Blue;
    //设置点的边框粗细
    chart1.Series[0].MarkerBorderWidth=2;
    //设置点的中心颜色
    chart1.Series[0].MarkerColor=Color.White;
    //设置点的大小
    chart1.Series[0].MarkerSize=8;
    //设置点的类型
    chart1.Series[0].MarkerStyle=MarkerStyle.Circle;
    
    //将超限的点修改为红色区分显示

    foreach(DataPoint point in chart1.Series[0].Points)
    {
        //鼠标悬停显示数据
        point.ToolTip=point.YValues[0].ToString();
        if(point.YValues[0]>18000)
            point.MarkerBorderColor=Color.Red;
    }
    #endregion
    

}

 

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值