-
แผนภูมิวงกลม C# เป็นสิ่งที่ง่ายมาก ฉันโพสต์ไว้เพราะฉันต้องการใช้ฟังก์ชันที่ไม่สามารถทำได้ด้วยการควบคุมใดๆ บนเครือข่าย
หลังจากค้นหาบนอินเทอร์เน็ตมาเกือบวัน ฉันก็เวียนหัว แต่ผลลัพธ์ก็น่าผิดหวังจริงๆ ด้วยความโมโห ฉันจึงวาดภาพอันหนึ่งขึ้นมาเอง ซึ่งใช้เวลาเพียงสามชั่วโมงเท่านั้น หวังว่าจะทำได้
นำความช่วยเหลือมาสู่เพื่อนที่ต้องการและหลีกเลี่ยงการออกนอกเส้นทาง ความรู้อยู่ที่การแบ่งปัน และทุกคนสามารถก้าวหน้าร่วมกันได้ โอเค ไม่มีเรื่องไร้สาระอีกต่อไป
คุณสามารถใช้งานได้โดยตรง สำหรับสภาพแวดล้อม C#.Net 2005 และระบบปฏิบัติการ XP หากคุณต้องการเชื่อมต่อกับฐานข้อมูลสำหรับการแสดงผลแบบไดนามิก คุณจะต้องเปลี่ยน DataTable ที่ส่งผ่านเข้ามาเท่านั้น
ไม่มีข้อสังเกตข้างต้น ฉันคิดว่ามันง่ายมาก ดังนั้นฉันจึงเพิกเฉยต่อมัน ฉันเชื่อว่าตราบใดที่คุณอ่านอย่างละเอียด มันก็ควรจะง่ายมาก
ขั้นแรกให้สร้างไฟล์ aspx และโพสต์โค้ดต่อไปนี้ โปรดทราบว่าส่วนสีแดงสามารถเปลี่ยนเป็นชื่อไฟล์ของคุณเองได้
ใช้ระบบ;
ใช้ System.Collections;
โดยใช้ System.ComponentModel;
ใช้ System.Data;
โดยใช้ระบบการวาดภาพ;
ใช้ System.Web;
โดยใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ใช้ System.Web.UI.HtmlControls;
โดยใช้ระบบ. Drawing. Drawing2D;
โดยใช้ระบบ.การวาดภาพ.ภาพ;
ใช้ System.IO;
Test_Chart คลาสสาธารณะบางส่วน: System.Web.UI.Page
-
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
//ใส่รหัสผู้ใช้ที่นี่เพื่อเริ่มต้นเพจ
สตรีม MemoryStream = MemoryStream ใหม่ ();
MemoryStream columnarStream = MemoryStream ใหม่ ();
กราฟบิตแมป = null;
DataTable dt = DataTable ใหม่ ();
dt.Columns.Add("Ven", typeof(System.String));
dt.Columns.Add("BadQty", typeof(System.Int32));
dt.Rows.Add("เหว่ยไห่ ซานตง", 65);
dt.Rows.Add("หวงซาน มณฑลอานฮุย",23);
dt.Rows.Add("มณฑลเจียงซูไท่หู",34);
dt.Rows.Add("ฉ่านซีหัวซาน",98);
dt.Rows.Add("ภูเขาจิงกัง หูหนาน",102);
dt.Rows.Add("ไหหลำหนานไห่",74);
กราฟ = GetPieGraph("สถิติอัตราความล้มเหลวเชิงซ้อนของแต่ละกลุ่ม",600,500,100,30,dt);
graph.Save(สตรีม, ImageFormat.Jpeg);
//เอาท์พุตรูปภาพ
การตอบสนอง.Clear();
Response.ContentType = "รูปภาพ/jpeg";
Response.BinaryWrite(สตรีม.ToArray());
-
บิตแมปที่ได้รับการป้องกัน GetPieGraph (ชื่อสตริง, ความกว้าง int, ความสูง int, int ซ้าย, int ด้านบน, DataTable gdt)
-
บิตแมป objbitmap = บิตแมปใหม่ (ความกว้าง ความสูง);
กราฟิก objgraphics;
objgraphics = Graphics.FromImage (objbitmap);
objgraphics.Clear (สี ขาว);
StringFormat Drawformat = System. Drawing.StringFormat ใหม่ (StringFormatFlags.DirectionVertical);
StringFormat Drawformat1 = System. Drawing.StringFormat ใหม่ (StringFormatFlags.DisplayFormatControl);
objgraphics.DrawString(title, new Font("宋体", 16),Brushes.Black, 150, 5, Drawformat1);
สัญลักษณ์ PointF = PointF ใหม่ (ซ้าย, ส่วนสูง-บน-45);
PointF descleg = PointF ใหม่ (ซ้าย + 20, ความสูง - บน - 45);
//วาดเส้นขอบ
objgraphics.DrawRectangle (ปากกาสีดำ, 0, 0, ความกว้าง-1, ความสูง-1);
//กรอบเล็กๆภายในภาพ
int h = gdt.Rows.Count / 4;
ถ้า (gdt.Rows.Count % 4 > 0)
-
ชั่วโมง = ชั่วโมง + 1;
-
objgraphics.DrawRectangle (ปากกาสีดำ ซ้าย-10 ความสูงบน-50 gdt.Rows.Count*70+10,20*h);
//แสดงว่าสีอะไรแสดงถึงอะไร
สำหรับ (int i = 0; i < gdt.Rows.Count; i++)
-
ถ้า (i >= 4 && (i+1)%4==1)
-
สัญลักษณ์ขา.Y += 20;
descleg.Y += 20;
symbolleg.X = ซ้าย;
descleg.X = ซ้าย + 20;
-
objgraphics.FillRectangle (SolidBrush ใหม่ (getcolor (i)), symbolleg.X, symbolleg.Y, 12, 10);
objgraphics.DrawRectangle (ปากกาสีดำ, symbolleg.X, symbolleg.Y, 12, 10);
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, descleg);
สัญลักษณ์ขา.X += 100;
descleg.X += 100;
-
ลอย sglcurrentangle = 0;
ลอย sgltotalangle = 0;
ลอย sgltotalvalues = 0;
สำหรับ (int i = 0; i < gdt.Rows.Count; i++)
-
sgltotalvalues += float.Parse(gdt.Rows[i][1].ToString().Trim());
-
สำหรับ (int i = 0; i < gdt.Rows.Count; i++)
-
sglcurrentangle = float.Parse(gdt.Rows[i][1].ToString().Trim()) / sgltotalvalues * 360;
objgraphics.FillPie (SolidBrush ใหม่ (getcolor (i)), ซ้าย +50, ด้านบน +30, 300, 300, sgltotalangle, sglcurrentangle);
objgraphics.DrawPie (ปากกาสีดำ, ซ้าย + 50, ด้านบน + 30,300, 300, sgltotalangle, sglcurrentangle);
//รัศมีr
สองเท่า r = 300/2;
//ตำแหน่งศูนย์กลางวงกลม:
cX สองเท่า = ซ้าย + 50 + r;
ดับเบิล cY = ด้านบน + 30 + r;
//พิกัดของจุดบนวงกลม:
double dX = r * Math.Cos((360 - sgltotalangle - sglcurrentangle / 2) * 3.14 / 180);
double dY = r * Math.Sin((360 - sgltotalangle - sglcurrentangle / 2) * 3.14 / 180);
//ตำแหน่งบนวงกลม:
dcX สองเท่า = cX + dX;
dcY สองเท่า = cY - dy;
//รัศมีr
สองเท่า r1 = 350/2;
//ตำแหน่งศูนย์กลางวงกลม:
cX1 สองเท่า = ซ้าย + 50 + r;
cY1 สองเท่า = บน + 30 + r;
//พิกัดของจุดบนวงกลม:
สองเท่า dX1 = r1 * Math.Cos((360 - sgltotalangle - sglcurrentangle / 2) * 3.14 / 180);
สองเท่า dY1 = r1 * Math.Sin ((360 - sgltotalangle - sglcurrentangle / 2) * 3.14 / 180);
//ตำแหน่งบนวงกลม:
dcX1 สองเท่า = cX1 + dX1;
dcY1 สองเท่า = cY1 - dY1;
objgraphics.DrawLine(Pens.Black,Convert.ToInt32(dcX) ,Convert.ToInt32(dcY),Convert.ToInt32(dcX1), Convert.ToInt32(dcY1));
ถ้า (dX1 >= 0 && dY1 >= 0)
-
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1), Convert.ToInt32(dcY1 - 5) ));
-
ถ้า (dX1 <= 0 && dY1 >= 0)
-
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1 - 25), Convert.ToInt32(dcY1) - 15));
-
ถ้า (dX1 <= 0 && dY1 <= 0)
-
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1 - 30), Convert.ToInt32(dcY1) ));
-
ถ้า (dX1 >= 0 && dY1 <= 0)
-
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1), Convert.ToInt32(dcY1)) ;
-
//GetLet(ซ้าย + 50+150, บน + 30+150,300,sgltotalangle, sglcurrentangle,arrvalues[i].ToString());
sgltotalangle += sglcurrentangle;
-
กลับ objbitmap;
-
โมฆะที่ได้รับการป้องกัน GetLet (int startX, int startY, เส้นผ่านศูนย์กลางสองเท่า, TotalAngle สองเท่า, currentAngle สองเท่า, ขาสตริง)
-
สองเท่า x = 0;
สองเท่า y = 0;
สองเท่า r = เส้นผ่านศูนย์กลาง / 2;
x = r * Math.Cos((360 - TotalAngle - currentAngle / 2) * 3.14 / 180);
y = r * Math.Sin((360 - TotalAngle - currentAngle / 2) * 3.14 / 180);
-
สีที่ได้รับการป้องกัน getcolor (int itemindex)
-
สี objcolor;
ถ้า (itemindex >= 14)
-
ดัชนีรายการ = ดัชนีรายการ % 14;
-
ถ้า (itemindex == 0)
-
objcolor = Color.DarkMagenta;
-
อย่างอื่นถ้า (itemindex == 1)
-
objcolor = Color.MediumAquamarine;
-
อย่างอื่นถ้า (itemindex == 2)
-
objcolor = Color.DeepSkyBlue;
-
อย่างอื่นถ้า (itemindex == 3)
-
objcolor = Color.DarkRed;
-
อย่างอื่นถ้า (itemindex == 4)
-
objcolor = สี ชมพู;
-
อย่างอื่นถ้า (itemindex == 5)
-
objcolor = Color.ปลาแซลมอน;
-
อย่างอื่นถ้า (itemindex == 6)
-
objcolor = สีกากี;
-
อย่างอื่นถ้า (itemindex == 7)
-
objcolor = สีมารูน;
-
อย่างอื่นถ้า (itemindex == 8)
-
objcolor = Color.LawnGreen;
-
อย่างอื่นถ้า (itemindex == 9)
-
objcolor = Color.LightGoldenrodYellow;
-
อย่างอื่นถ้า (itemindex == 10)
-
objcolor = Color.Moccasin;
-
อย่างอื่นถ้า (itemindex == 11)
-
objcolor = Color.YellowGreen;
-
อย่างอื่นถ้า (itemindex == 12)
-
objcolor = Color.DarkCyan;
-
อย่างอื่นถ้า (itemindex == 13)
-
objcolor = Color.SteelBlue;
-
อย่างอื่นถ้า (itemindex == 14)
-
objcolor = สีมะเขือเทศ;
-
อื่น
-
objcolor = Color.SlateGray;
-
กลับ objcolor;
-
-