日期:2014-05-18  浏览次数:20470 次

有没有人做过类似曲线图或折线图的东西啊
如题
        是否可以发份样本     或代码给我啊     :)
邮箱:c1945@163.com
先谢谢各位拉

------解决方案--------------------
//获取数据
DataSet ds=getData1(param1,param2,param3,param4);//自己替换掉
//建立图形对象
Graphics objGraphics;//建立画板对象
Bitmap objBitmap=new Bitmap(1000,500);//建立位图对象
objGraphics=Graphics.FromImage(objBitmap);//根据位图对象建立画板对象
objGraphics.Clear(Color.White);//设置画板对象背景色
//绘制坐标轴
PointF point1=new PointF(30,420);//定义坐标轴原点
PointF point2=new PointF(970,420);//定义横坐标终点
PointF point3=new PointF(30,30);//定义纵坐标终点
PointF point4=new PointF(25,40);//定义箭头左侧点
PointF point5=new PointF(35,40);//定义箭头右侧点
PointF line1Start=new PointF(30,320);//定义水平线100单位起点
PointF line1End=new PointF(970,320);//定义水平线100单位终点
PointF line2Start=new PointF(30,220);//定义水平线200单位起点
PointF line2End=new PointF(970,220);//定义水平线200单位终点
PointF line3Start=new PointF(30,120);//定义水平线300单位起点
PointF line3End=new PointF(970,120);//定义水平线300单位终点
objGraphics.DrawLine(Pens.Black,point1,point2);//绘制横坐标
objGraphics.DrawLine(Pens.Black,point1,point3);//绘制纵坐标
objGraphics.DrawLine(Pens.Black,point3,point4);//绘制左侧箭头线
objGraphics.DrawLine(Pens.Black,point3,point5);//绘制右侧箭头线
objGraphics.DrawLine(Pens.YellowGreen,line1Start,line1End);//绘制水平线100单位
objGraphics.DrawLine(Pens.YellowGreen,line2Start,line2End);//绘制水平线200单位
objGraphics.DrawLine(Pens.YellowGreen,line3Start,line3End);//绘制水平线300单位
//获取数据
float[] arrValues=new float[ds.Tables[0].Rows.Count];
float flag=0;//获取最大的数值
for(int i=0;i <ds.Tables[0].Rows.Count;i++)
{
arrValues[i]=float.Parse(ds.Tables[0].Rows[i][0].ToString());
if(arrValues[i]> flag)
{
flag=arrValues[i];
}
}
int pos=flag.ToString().IndexOf( ". ");//获取最大值中小数点的索引位置
int count1=0;
int countParam1=1;//缩放参数1
int count2=1;
float countParam2=1;//缩放参数2
//最大值大于1000(最大值中小数点索引位置大于3)
if(pos> 3)
{
count1=pos-3;
for(int i=0;i <count1;i++)
{
countParam1=countParam1*10;
}
}
//最大值的整数位数
for(int i=1;i <pos;i++)
{
count2=count2*10;
}
//最大值最高位的数值大于4的情况下,缩放参数2的值为0.4
if(flag/count2> 4)
{
countParam2=float.Parse( "0.4 ");
}
//使用缩放参数调整要显示的数值
for(int i=0;i <ds.Tables[0].Rows.Count;i++)
{
arrValues[i]=countParam2*float.Parse(ds.Tables[0].Rows[i][0].ToString())/countParam1+1;//加参数以避免实体超出图像范围,加1以避免未达到一个单位的矩形无法显示
}
//使用缩放参数调整坐标轴刻度值
float scale1=100*countParam1/countParam2;
float scale2=200*countParam1/countParam2;
float scale3=300*countParam1/countParam2;
if(param5== "1 " || param5== "3 ")
{
//绘制调整后的坐标轴刻度值
PointF scalePoint1=new PointF(30,320);
PointF scalePoint2=new PointF(30,220);
PointF scalePoint3=new PointF(30,120);
objGraphics.DrawString(scale1.ToString(),new Font( "宋体 ",9),Brushes.Black,scalePoint1);
objGraphics.DrawString(scale2.ToString(),new Font( "宋体 ",9),Brushes.Black,scalePoint2);
objGraphics.DrawString(scale3.ToString(),new Font( "宋体 ",9),Brushes.Black,scalePoint3);
}

//画折线图
for(int j=0;j <arrValues.Length;j++)
{
if(j> 0)
{
int k=j-1;
PointF pointA=new PointF((j*65)+60,420-arrValues[j]);//定义起始点
PointF pointB=new PointF((k*65)+60,420-arrValues[k]);//定义结束点
objGraphics.DrawLine(Pens.Blue,pointA,pointB);//画折线
}
//标出数据
PointF dataLeg=new PointF((j*65)+50,400-arrValues[j]);
objGraphics.DrawString(ds.Tables[0].Rows[j][0].To