[C#] C#.NET实现折线图

来源:互联网 发布:动画制作软件有哪些 编辑:程序博客网 时间:2024/05/16 15:48

为了更好、更直观的看出统计的数据趋势,我们可以通过做折线图来实现。下面就介绍一个画折线图的例子:

注意添加引用 using System.Drawing.Imaging;   using System.Drawing;

  protected void Page_Load(object sender, EventArgs e)
    
{      
        
string[] month = new string[12"一月""二月""三月""四月""五月""六月""七月""八月""九月""十月""十一月""十二月" };
        
float[] d = new float[1220.5f6010.8f15.6f3070.9f50.3f30.7f7050.4f30.8f20 }//图中的点的数据

        
//画图初始化
        System.Drawing.Bitmap bmap = new System.Drawing.Bitmap(500500);
        Graphics gph 
= Graphics.FromImage(bmap);
        gph.Clear(Color.White);
        PointF cpt 
= new PointF(40420);//中心点
        PointF[] xpt = new PointF[3new PointF(cpt.Y + 15, cpt.Y), new PointF(cpt.Y, cpt.Y - 8), new PointF(cpt.Y, cpt.Y + 8) };//x轴三角形
        PointF[] ypt = new PointF[3new PointF(cpt.X, cpt.X - 15), new PointF(cpt.X - 8, cpt.X), new PointF(cpt.X + 8, cpt.X) };//y轴三角形
        gph.DrawString("某工厂某产品月生产量图表"new Font("宋体"14), Brushes.Black, new PointF(cpt.X + 60, cpt.X));//图表标题

        
//画x轴
        gph.DrawLine(Pens.Black, cpt.X, cpt.Y, cpt.Y, cpt.Y);
        gph.DrawPolygon(Pens.Black, xpt);
        gph.FillPolygon(
new SolidBrush(Color.Black), xpt);
        gph.DrawString(
"月份"new Font("宋体"12), Brushes.Black, new PointF(cpt.Y + 10, cpt.Y + 10));

        
//画y轴
        gph.DrawLine(Pens.Black, cpt.X, cpt.Y, cpt.X, cpt.X);
        gph.DrawPolygon(Pens.Black, ypt);
        gph.FillPolygon(
new SolidBrush(Color.Black), ypt);
        gph.DrawString(
"单位(万)"new Font("宋体"12), Brushes.Black, new PointF(07));
        
for (int i = 1; i <= 12; i++)
        
{
            
//画y轴刻度
            if (i < 11)
            
{
                gph.DrawString(Convert.ToString(i 
* 10), new Font("宋体"11), Brushes.Black, new PointF(cpt.X - 30, cpt.Y - i * 30 - 6));
                gph.DrawLine(Pens.Black, cpt.X 
- 3, cpt.Y - i * 30, cpt.X, cpt.Y - i * 30);
            }

            
//画x轴项目
            gph.DrawString(month[i - 1].Substring(01), new Font("宋体"11), Brushes.Black, new PointF(cpt.X + i * 30 - 5, cpt.Y + 5));
            gph.DrawString(month[i 
- 1].Substring(11), new Font("宋体"11), Brushes.Black, new PointF(cpt.X + i * 30 - 5, cpt.Y + 20));
            
if (month[i - 1].Length > 2) gph.DrawString(month[i - 1].Substring(21), new Font("宋体"11), Brushes.Black, new PointF(cpt.X + i * 30 - 5, cpt.Y + 35));
            
//画点
            gph.DrawEllipse(Pens.Black, cpt.X + i * 30 - 1.5f, cpt.Y - d[i - 1* 3 - 1.5f33);
            gph.FillEllipse(
new SolidBrush(Color.Black), cpt.X + i * 30 - 1.5f, cpt.Y - d[i - 1* 3 - 1.5f33);
            
//画数值
            gph.DrawString(d[i - 1].ToString(), new Font("宋体"11), Brushes.Black, new PointF(cpt.X + i * 30, cpt.Y - d[i - 1* 3));
            
//画折线
            if (i > 1) gph.DrawLine(Pens.Red, cpt.X + (i - 1* 30, cpt.Y - d[i - 2* 3, cpt.X + i * 30, cpt.Y - d[i - 1* 3);

        }


        
//输出到浏览器
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        bmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        Response.ClearContent();
        Response.ContentType 
= "image/Gif";
        Response.BinaryWrite(ms.ToArray());
        gph.Dispose();
        bmap.Dispose();
}

显示效果如下: