-
Diagram lingkaran C# sebenarnya adalah hal yang sangat sederhana. Saya mempostingnya karena saya ingin mengimplementasikan fungsi yang tidak dapat dicapai oleh kontrol apa pun di jaringan.
Setelah hampir seharian mencari di Internet, saya pusing, tapi hasilnya mengecewakan banget. Karena marah, saya menggambarnya sendiri, yang saya harap hanya butuh waktu tiga jam
Bawalah bantuan kepada teman yang membutuhkan dan hindari jalan memutar. Pengetahuan terletak pada berbagi dan semua orang bisa membuat kemajuan bersama. Oke, tidak ada lagi omong kosong. Kodenya adalah sebagai berikut.
Anda dapat menggunakannya secara langsung. Untuk lingkungan C#.Net 2005 dan sistem operasi XP, jika Anda perlu terhubung ke database untuk tampilan dinamis, Anda hanya perlu mengubah DataTable yang diteruskan.
Tidak ada komentar di atas. Saya pikir itu sangat sederhana, jadi saya mengabaikannya. Saya yakin selama Anda membacanya dengan cermat, itu seharusnya sangat sederhana.
Pertama buat file aspx dan posting kode berikut. Perhatikan bahwa bagian merah dapat diubah menjadi nama file Anda sendiri.
menggunakan Sistem;
menggunakan Sistem.Koleksi;
menggunakan Sistem.ComponentModel;
menggunakan Sistem.Data;
menggunakan Sistem.Gambar;
menggunakan Sistem.Web;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan Sistem.Web.UI.HtmlControls;
menggunakan System.Drawing.Drawing2D;
menggunakan System.Drawing.Imaging;
menggunakan Sistem.IO;
kelas parsial publik Test_Chart : System.Web.UI.Page
{
dilindungi kekosongan Page_Load (pengirim objek, EventArgs e)
{
//Masukkan kode pengguna di sini untuk menginisialisasi halaman
Aliran MemoryStream = MemoryStream baru();
MemoryStream ColumnarStream = MemoryStream baru();
Grafik bitmap = null;
DataTable dt = DataTable baru();
dt.Columns.Add("Ven", typeof(System.String));
dt.Columns.Add("BadQty", typeof(System.Int32));
dt.Baris.Tambahkan("Weihai, Shandong", 65);
dt.Baris.Tambahkan("Huangshan, Anhui",23);
dt.Baris.Tambahkan("Jiangsu Taihu",34);
dt.Baris.Tambahkan("Shaanxi Huashan",98);
dt.Rows.Add("Gunung Jinggang, Hunan",102);
dt.Baris.Tambahkan("Hainan Nanhai",74);
graph = GetPieGraph("Statistik tingkat kegagalan kompeks setiap grup",600,500,100,30,dt);
grafik.Simpan(aliran, ImageFormat.Jpeg);
//Keluaran gambar
Respon.Hapus();
Response.ContentType = "gambar/jpeg";
Respon.BinaryWrite(stream.ToArray());
}
Bitmap GetPieGraph yang dilindungi (judul string, lebar int, tinggi int, int kiri, int atas, DataTable gdt)
{
Objbitmap Bitmap = Bitmap baru (lebar, tinggi);
Objgrafik grafis;
objgraphics = Grafik.FromImage(objbitmap);
objgraphics.Clear(Warna.Putih);
StringFormat drawformat = Sistem baru.Gambar.StringFormat(StringFormatFlags.DirectionVertical);
StringFormat drawformat1 = Sistem baru.Gambar.StringFormat(StringFormatFlags.DisplayFormatControl);
objgraphics.DrawString(judul, Font baru("宋体", 16),Brushes.Black, 150, 5, drawformat1);
Simbol PointF = new PointF (kiri, tinggi-atas-45);
PointF descleg = new PointF(kiri + 20, tinggi - atas - 45);
//Gambarlah batasnya
objgraphics.DrawRectangle(Pena.Hitam, 0, 0, lebar-1, tinggi-1);
//Bingkai kecil di dalam gambar
int h = gdt.Rows.Count / 4;
if (gdt.Rows.Count % 4 > 0)
{
jam = jam + 1;
}
objgraphics.DrawRectangle(Pena.Hitam, kiri-10, tinggi-atas-50,gdt.Rows.Count*70+10,20*h);
//Tampilkan warna apa yang mewakili apa
untuk (int i = 0; i < gdt.Rows.Count; i++)
{
jika (saya >= 4 && (i+1)%4==1)
{
simbolkaki.Y += 20;
hapus.Y += 20;
simbolkaki.X = kiri;
descleg.X = kiri + 20;
}
objgraphics.FillRectangle(SolidBrush baru(getcolor(i)), simbolkaki.X, simbolkaki.Y, 12, 10);
objgraphics.DrawRectangle(Pena.Hitam, simbolkaki.X, simbolkaki.Y, 12, 10);
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), new Font("宋体", 10), Brushes.Black, descleg);
simbolkaki.X += 100;
hapus.X += 100;
}
float sglcurrentangle = 0;
float sgltotalangle = 0;
float sgltotalnilai = 0;
untuk (int i = 0; i < gdt.Rows.Count; i++)
{
sgltotalvalues += float.Parse(gdt.Rows[i][1].ToString().Trim());
}
untuk (int i = 0; i < gdt.Rows.Count; i++)
{
sglcurrentangle = float.Parse(gdt.Rows[i][1].ToString().Trim()) / sgltotalvalues * 360;
objgraphics.FillPie(New SolidBrush(getcolor(i)), kiri+50, atas+30, 300, 300, sgltotalangle, sglcurrentangle);
objgraphics.DrawPie(Pens.Black, kiri + 50, atas + 30,300, 300, sgltotalangle, sglcurrentangle);
//radius r
ganda r = 300/2;
//Posisi tengah lingkaran:
cX ganda = kiri + 50 + r;
ganda cY = atas + 30 + r;
//Koordinat titik pada lingkaran:
double dX = r * Math.Cos((360 - sgltotalangle - sglcurrentangle / 2) * 3,14 / 180);
double dY = r * Math.Sin((360 - sgltotalangle - sglcurrentangle / 2) * 3,14 / 180);
//Posisi pada lingkaran:
dcX ganda = cX + dX;
dcY ganda = cY - dY;
//radius r
ganda r1 = 350/2;
//Posisi tengah lingkaran:
ganda cX1 = kiri + 50 + r;
ganda cY1 = atas + 30 + r;
//Koordinat titik pada lingkaran:
double dX1 = r1 * Math.Cos((360 - sgltotalangle - sglcurrentangle / 2) * 3,14 / 180);
double dY1 = r1 * Math.Sin((360 - sgltotalangle - sglcurrentangle / 2) * 3,14 / 180);
//Posisi pada lingkaran:
dcX1 ganda = cX1 + dX1;
ganda dcY1 = cY1 - dY1;
objgraphics.DrawLine(Pens.Black,Convert.ToInt32(dcX) ,Convert.ToInt32(dcY),Convert.ToInt32(dcX1), Convert.ToInt32(dcY1));
jika (dX1 >= 0 && dY1 >= 0)
{
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), Font baru("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1), Convert.ToInt32(dcY1 - 5 ));
}
jika (dX1 <= 0 && dY1 >= 0)
{
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), Font baru("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1 - 25), Convert.ToInt32(dcY1 - 15));
}
jika (dX1 <= 0 && dY1 <= 0)
{
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), Font baru("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1 - 30), Convert.ToInt32(dcY1 ));
}
jika (dX1 >= 0 && dY1 <= 0)
{
objgraphics.DrawString(gdt.Rows[i][0].ToString().Trim(), Font baru("宋体", 10), Brushes.Black, Convert.ToInt32(dcX1), Convert.ToInt32(dcY1)) ;
}
//GetLet(kiri + 50+150, atas + 30+150,300,sgltotalangle, sglcurrentangle,arrvalues[i].ToString());
sgltotalangle += sglcurrentangle;
}
kembalikan peta bit;
}
getLet kekosongan yang dilindungi (int startX, int startY, diameter ganda, totalAngle ganda, sudut arus ganda, kaki string)
{
ganda x = 0;
ganda y = 0;
ganda r = dia / 2;
x = r * Math.Cos((360 - totalAngle - currentAngle / 2) * 3,14 / 180);
y = r * Math.Sin((360 - totalAngle - currentAngle / 2) * 3,14 / 180);
}
Warna yang dilindungi getcolor (int indeks item)
{
Warna tidak sesuai warna;
jika (indeks item >= 14)
{
indeks item = indeks item % 14;
}
jika (indeks item == 0)
{
objcolor = Warna.Magenta Gelap;
}
lain jika (itemindex == 1)
{
objcolor = Warna.MediumAquamarine;
}
lain jika (itemindex == 2)
{
objcolor = Warna.DeepSkyBlue;
}
lain jika (itemindex == 3)
{
objcolor = Warna.Merah Tua;
}
lain jika (indeks item == 4)
{
objcolor = Warna.Merah Muda;
}
lain jika (itemindex == 5)
{
objcolor = Warna.Salmon;
}
lain jika (itemindex == 6)
{
objcolor = Warna.Khaki;
}
lain jika (itemindex == 7)
{
objcolor = Warna.Maroon;
}
lain jika (itemindex == 8)
{
objcolor = Warna.LawnGreen;
}
lain jika (indeks item == 9)
{
objcolor = Warna.LightGoldenrodKuning;
}
lain jika (indeks item == 10)
{
objcolor = Warna.Moccasin;
}
lain jika (itemindex == 11)
{
objcolor = Warna.KuningHijau;
}
lain jika (itemindex == 12)
{
objcolor = Warna.DarkCyan;
}
else if (indeks item == 13)
{
objcolor = Warna.BajaBiru;
}
lain jika (indeks item == 14)
{
objcolor = Warna.Tomat;
}
kalau tidak
{
objcolor = Warna.SlateGray;
}
kembalikan warna objek;
}
}