public class CSChart
![]()
{
private int ypercent; //纵坐标分段数
private int xpercent; //横坐标分段数
private int width; //绘图区宽
private int height; //绘图区高
private bool xcenter; //是不以X轴Y轴交点作为X轴的起始坐标点
private int xpercentvalue;//X轴每段表示的值
private int ypercentvalue;//Y轴每段表示的值
private int xstartvalue;//X轴超始值
private int ystartvalue;//Y轴起始值
private int xlinelength;//X轴长
private int ylinelength;//Y轴长
private string xname;//X辆名
private string yname;//Y轴名
private int[] data; //绘图数据
private Graphics gt; //绘图设备
public int[] Data
![]()
{
set
![]()
{
data=value;
}
get
![]()
{
return data;
}
}
public Graphics g
![]()
{
set
![]()
{
gt=value;
}
get
![]()
{
return gt;
}
}
public int YPercent
![]()
{
set
![]()
{
ypercent=value;
}
get
![]()
{
return ypercent;
}
}
public int XPercent
![]()
{
set
![]()
{
xpercent=value;
}
get
![]()
{
return xpercent;
}
}
public int XPercentValue
![]()
{
set
![]()
{
xpercentvalue=value;
}
get
![]()
{
return xpercentvalue;
}
}
public int YPercentValue
![]()
{
set
![]()
{
ypercentvalue=value;
}
get
![]()
{
return ypercentvalue;
}
}
public int XStartValue
![]()
{
set
![]()
{
xstartvalue=value;
}
get
![]()
{
return xstartvalue;
}
}
public int YStartValue
![]()
{
set
![]()
{
ystartvalue=value;
}
get
![]()
{
return ystartvalue;
}
}
public int XLineLength
![]()
{
set
![]()
{
xlinelength=value;
}
get
![]()
{
return xlinelength;
}
}
public int YLineLength
![]()
{
set
![]()
{
ylinelength=value;
}
get
![]()
{
return ylinelength;
}
}
public string XName
![]()
{
set
![]()
{
xname=value;
}
get
![]()
{
return xname;
}
}
public string YName
![]()
{
set
![]()
{
yname=value;
}
get
![]()
{
return yname;
}
}
public int Width
![]()
{
![]()
set
{width=value;}
![]()
get
{return width;}
}
public int Height
![]()
{
![]()
set
{height=value;}
![]()
get
{return height;}
}
public bool Xcenter
![]()
{
![]()
set
{xcenter=value;}
![]()
get
{return xcenter;}
}
public CSChart()
![]()
{
//
// TODO: 在此处添加构造函数逻辑
//
xpercent=13;
ypercent=12;
width=600;
height=500;
xpercentvalue=1;
ypercentvalue=10;
xstartvalue=1990;
ystartvalue=0;
yname="资金";
xname="月份";
xcenter=false;
xlinelength=400;
ylinelength=400;
![]()
data = new int[12]
{80,50,48,56,75,21,62,12,45,110,90,20};
}
public CSChart(int _xpercent,int _ypercent,int _width,int _height,int _xpercentvalue,int _ypercentvalue,int _xstartvalue,int _ystartvalue,string _xname,string _yname,bool _xcenter,int _xlinelength,int _ylinelength,int[] _data)
![]()
{
xpercent=_xpercent;
ypercent=_ypercent;
width=_width;
height=_height;
XPercentValue=_xpercentvalue;
YPercentValue=_ypercentvalue;
xstartvalue=_xstartvalue;
ystartvalue=_ystartvalue;
xname=_xname;
yname=_yname;
xcenter=_xcenter;
xlinelength=_xlinelength;
ylinelength=_ylinelength;
data=_data;
}
public void DrawCross(Brush brush,int linewidth,bool center)
![]()
{
Pen CrossPen = new Pen(brush,linewidth);
Font font = new Font("宋体",10);
xcenter=center;
g.DrawLine(CrossPen,80,Height-80,80+XLineLength,Height-80);//画X轴
Point[] Points = new Point[3];//定义X轴箭头
Points[0].X=80+XLineLength;Points[0].Y=Height-85;
Points[1].X=80+XLineLength;Points[1].Y=Height-75;
Points[2].X=100+XLineLength;Points[2].Y=Height-80;
g.FillPolygon(brush,Points); //画X轴箭头
g.DrawString(XName,font,brush,100+XLineLength,Height-80);//X轴名
if(Xcenter)
![]()
{
for(int i=0;i<xpercent;i++)
![]()
{
g.DrawLine(CrossPen,80+XLineLength/XPercent/2+i*XLineLength/XPercent,Height-80,80+XLineLength/XPercent/2+i*XLineLength/XPercent,Height-76);//画X轴单位点
g.DrawString(Convert.ToString(XStartValue+i*XPercentValue),font,new SolidBrush(Color.Black),80+XLineLength/XPercent/2+i*XLineLength/XPercent-XStartValue.ToString().Length*font.Size/2,Height-75);//画X轴坐标值
}
}
else
![]()
{
for(int i=0;i<xpercent;i++)
![]()
{
g.DrawLine(CrossPen,80+i*XLineLength/XPercent,height-80,80+i*XLineLength/XPercent,Height-76);//画X轴单位点
g.DrawString(Convert.ToString(XStartValue+i*XPercentValue),font,new SolidBrush(Color.Black),80+i*XLineLength/XPercent-XStartValue.ToString().Length*font.Size/2,Height-75);//画X轴坐标值
}
}
g.DrawLine(CrossPen,80,Height-80,80,Height-80-YLineLength);//画Y轴
Points[0].X=75;Points[0].Y=Height-80-YLineLength; //Y轴箭头
Points[1].X=85;Points[1].Y=Height-80-YLineLength;
Points[2].X=80;Points[2].Y=Height-100-YLineLength;
g.FillPolygon(brush,Points);//画Y轴箭头
g.DrawString(yname,font,brush,85,Height-80-YLineLength);//画Y轴名
for(int i=0;i<ypercent;i++)
![]()
{
g.DrawLine(CrossPen,80,Height-80-i*YLineLength/YPercent,76,Height-80-i*YLineLength/YPercent);//画Y轴单位点
g.DrawString(Convert.ToString(YStartValue+i*YPercentValue),font,new SolidBrush(Color.Black),50,Height-85-i*YLineLength/YPercent);//画X轴坐标值
}
}
public void DrawChartName(string name,Font font,Brush brush)//画统计表头(名)
![]()
{
g.DrawString(name,font,brush,(Width-name.Length*font.Size)/2,30);
}
public void DrawChart(int[] data,Graphics g)
![]()
{
![]()
/**//*private int ypercent; //纵坐标分段数
private int xpercent; //横坐标分段数
private int width; //绘图区宽
private int height; //绘图区高
private bool xcenter; //是不以X轴Y轴交点作为X轴的起始坐标点
private int xpercentvalue;//X轴每段表示的值
private int ypercentvalue;//Y轴每段表示的值
private int xstartvalue;//X轴超始值
private int ystartvalue;//Y轴起始值
private int xlinelength;//X轴长
private int ylinelength;//Y轴长
private string xname;//X辆名
private string yname;//Y轴名
private int[] data; //绘图数据
private Graphics gt; //绘图设备
*
*
* */
Brush brush = new SolidBrush(Color.Black);
Pen CrossPen = new Pen(brush,2);
g.DrawLine(CrossPen,100,50,100,YLineLength+50); //y 轴
g.DrawLine(CrossPen,100,YLineLength+50,100+XLineLength,YLineLength+50); //x 轴
Point[] HPoints = new Point[3];
HPoints[0].X=95;HPoints[0].Y=50;
HPoints[1].X=105;HPoints[1].Y=50;
HPoints[2].X=100;HPoints[2].Y=30;
Point[] YPoints = new Point[3];
YPoints[0].X=100+XLineLength;YPoints[0].Y=YLineLength+45;
YPoints[1].X=100+XLineLength;YPoints[1].Y=YLineLength+55;
YPoints[2].X=120+XLineLength;YPoints[2].Y=YLineLength+50;
g.FillPolygon(brush,HPoints);
g.FillPolygon(brush,YPoints);
int y=0;
int x=0;
for(int i=0;i<ypercent;i++)
![]()
{
g.DrawLine(CrossPen,96,YLineLength+50-(YLineLength/YPercent)*i,100,YLineLength+50-(YLineLength/YPercent)*i); //在y轴上标点
y=i*ypercentvalue;
g.DrawString(y.ToString(),new Font("宋体",10),brush,75,YLineLength+45-i*(YLineLength/YPercent));
}
for(int i=0;i<xpercent;i++)
![]()
{
g.DrawLine(CrossPen,100+i*(XLineLength/XPercent),YLineLength+50,100+i*(XLineLength/XPercent),YLineLength+54);//在x轴上标点
x=i*xpercentvalue+1;
g.DrawString(x.ToString(),new Font("宋体",10),brush,95+i*(XLineLength/XPercent),YLineLength+60);
}
g.DrawString(xname,new Font("宋体",10),brush,XLineLength+100,YLineLength+70);
g.DrawString(yname,new Font("宋体",10),brush,105,50);
for(int i=0;i<data.Length;i++)
![]()
{
int hight =300*data[i]/100;
g.FillRectangle(new SolidBrush(Color.Red),new Rectangle(100+i*(XLineLength/XPercent)+(XLineLength/XPercent/2-10),YLineLength+50-hight,20,hight));
}
}
public bool SetData(int[] newdata)
![]()
{
if(newdata.Length==xpercent)
![]()
{
data=newdata;
return true;
}
else
return false;
}
public void DrawLineData(Color color,int linewidth)
![]()
{
Pen pen = new Pen(new SolidBrush(color),linewidth);
Point[] points = new Point[XPercent];
for(int i=0;i<XPercent;i++)
![]()
{
if(Xcenter)
![]()
{
points[i].X=100+XLineLength/XPercent/2+i*XLineLength/XPercent;
points[i].Y=Height-80-(Data[i]-YStartValue)*YLineLength/YPercentValue/YPercent;
}
else
![]()
{
points[i].X=100+(XLineLength/XPercent/2-10)+i*XLineLength/XPercent;
//points[i].Y=Height-80-(Data[i]-YStartValue)*YLineLength/YPercentValue/YPercent;
points[i].Y=YLineLength+50-Data[i]*3;
}
}
// Point[] points=new Point[2];
// points[0].X=100;points[0].Y=500;
// points[1].X=200;points[1].Y=300;
g.DrawLines(pen,points);
}
public void DrawRecData(Color color,int recwidth)//画统计表长条
![]()
{
SolidBrush brush = new SolidBrush(color);
Pen pen = new Pen(brush,1);
for(int i=0;i<ypercent;i++)
![]()
{
g.FillRectangle(brush,80+i*xlinelength/xpercent+(xlinelength/xpercent-recwidth)/2,height-80-(data[i]-ystartvalue)*ylinelength/ypercentvalue/ypercent,recwidth,(data[i]-ystartvalue)*ylinelength/ypercentvalue/ypercent);
}
}
}