您的位置: 旅游网 > 影视

如何在C#的WinForm中制作饼状图和柱状图(二)

发布时间:2019-12-04 11:49:24

¡¡¡¡

//»­ÌõÐÎͼ

public class BarChart

{

public BarChart()

{

}

//RenderÊÇͼÐδó±êÌ⣬ͼ¿ªÐ¡±êÌ⣬ͼÐοí¶È£¬Í¼Ðγ¤¶È£¬±ýͼµÄÊý¾Ý¼¯ºÍ±ýͼµÄÊý¾Ý¼¯

public Image Render(string title, string subTitle, int width, int height, DataSet chartData)

{

const int SIDE_LENGTH = 400;

const int CHART_TOP = 75;

const int CHART_HEIGHT = 200;

const int CHART_LEFT = 50;

const int CHART_WIDTH = 300;

DataTable dt = chartData.Tables[0];

//¼ÆËã×î¸ßµÄµã

float highPoint = 0;

foreach(DataRow dr in dt.Rows)

{

if(highPoint<Convert.ToSingle(dr[0]))

{

highPoint = Convert.ToSingle(dr[0]);

}

}

//½¨Á¢Ò»¸öGraphics¶ÔÏóʵÀý

Bitmap bm = new Bitmap(width,height);

try

{

Graphics g = Graphics.FromImage(bm);

//ÉèÖÃÌõͼͼÐκÍÎÄ×ÖÊôÐÔ

g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);

g.SmoothingMode = SmoothingMode.Default;

g.TextRenderingHint = TextRenderingHint.AntiAlias;

//É趨»­²¼ºÍ±ß

g.Clear(Color.White);

g.DrawRectangle(Pens.Black,0,0,SIDE_LENGTH-1,SIDE_LENGTH-1);

//»­´ó±êÌâ

g.DrawString(title,new Font(Tahoma,14),Brushes.Black,new PointF(5,5));

//»­Ð¡±êÌâ

g.DrawString(subTitle,new Font(Tahoma,12),Brushes.Black,new PointF(7,35));

//»­ÌõÐÎͼ

float barWidth = CHART_WIDTH / (dt.Rows.Count * 2);

PointF barOrigin = new PointF(CHART_LEFT + (barWidth / 2),0);

float barHeight = dt.Rows.Count;

for(int i=0;i<dt.Rows.Count;i++)

{

barHeight = Convert.ToSingle(dt.Rows[i][0]) * 200 / highPoint * 1;

barOrigin.Y = CHART_TOP + CHART_HEIGHT - barHeight;

g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),barOrigin.X,barOrigin.Y,barWidth,barHeight);

barOrigin.X = barOrigin.X + (barWidth * 2);

}

//ÉèÖñß

g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT,CHART_TOP),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT));

g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT),new Point(CHART_LEFT + CHART_WIDTH,CHART_TOP + CHART_HEIGHT));

//»­Í¼Àý¿òºÍÎÄ×Ö

g.DrawRectangle(new Pen(Color.Black,1),200,300,199,99);

g.DrawString(ͼ±í˵Ã÷,new Font(Tahoma,12,FontStyle.Bold),Brushes.Black,new PointF(200,300));

//»­Í¼Àý

PointF boxOrigin = new PointF(210,330);

PointF textOrigin = new PointF(235,326);

for(int i=0;i<dt.Rows.Count;i++)

{

g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),boxOrigin.X,boxOrigin.Y,20,10);

g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,20,10);

g.DrawString(dt.Rows[i][1].ToString() + - + dt.Rows[i][0].ToString(),new Font(Tahoma,10),Brushes.Black,textOrigin);

boxOrigin.Y += 15;

textOrigin.Y += 15;

}

//Êä³öͼÐÎ

g.Dispose();

return bm;

}

catch

{

return bm;

}

}

}

public class ChartUtil

{

public ChartUtil()

{

}

public static Color GetChartItemColor(int itemIndex)

{

Color selectedColor;

switch(itemIndex)

{

case 0:

selectedColor = Color.Blue;

break;

case 1:

selectedColor = Color.Red;

break;

case 2:

selectedColor = Color.Yellow;

break;

case 3:

selectedColor = Color.Purple;

break;

default:

selectedColor = Color.Green;

break;

}

return selectedColor;

}

}

}

ÉÏÒ»Ò³[1][2]

²é¿´±¾ÎÄÀ´Ô´

长沙市雨花区东山街道社区卫生服务中心
郑州国医堂性病医院专家
清远治疗宫颈糜烂费用
安徽癫痫病医院去哪家好些
信阳治疗包皮过长方法
猜你会喜欢的
猜你会喜欢的