|  |   | |  | | ASP.NET İle Pasta Grafik | Evren AYAN'ın (www.evrenayan.net) sitesinde gördüm heveslendim. Bende bir pasta grafik komponenti yazayım dedim. Bir süredir test ediyordum. Sitemin giriş sayfasındaki anketin altındaki Diğer Anketler linkine tıklayarak orada bulunan anketlerin sonuçlarını bu pasta grafikle görebilirsiniz. Kodu ilk yorumda.
<img src='pasta.aspx?gorun=yuzde&sayi=4-10-8-5&metin=He-Yo-Gibi-Ne?' /> şeklinde kullanılmaktadır. Örnek grafik en alttadır.
En fazla 8 adet değeri gösterebilmektedir. Zaten daha fazla değer için pasta grafik kullanmak anlamsızdır. Ama istenirse Select Case blogu içi çoğaltılarak arttırılabilir.
URL de verilen gorun parametresi yan taraftaki değerlerin nasıl görüneceğini belirler.
gorun=yuzde Yüzde oranlarını gösterir
gorun=deger Değerin kendisini gösterir
gorun=yok Hiç bir şey göstermez
sayi parametresine grafiği çizilecek değerler tire "-" ile ayrılırarak yazılır. 4-10-8-5 gibi. metin parametresine değerlere ait etiketler tire "-" ile ayrılırarak yazılır. He-Yo-Gibi-Ne? gibi.
pasta.aspx?gorun=yuzde&sayi=4-10-8-5&metin=He-Yo-Gibi-Ne? pasta.aspx?gorun=deger&sayi=4-10-8-5&metin=He-Yo-Gibi-Ne? pasta.aspx?gorun=yok&sayi=4-10-8-5&metin=He-Yo-Gibi-Ne?
Örnek pasta.aspx?gorun=yuzde&sayi=4-10-8-5&metin=He-Yo-Gibi-Ne?

Grafiğin zemininin nasıl şeffaf yapıldığını görmek için ASP.net İle Grafik İşlemek adlı makalemi okumanızı öneririm. | 15.06.2005 12:50 ufukyayla | Projelerim |
| |  | |  |
   | |  | | 1. 15.06.2005 14:28 ufukyayla
| pasta.aspx
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Drawing" %> <%@ Import Namespace="System.Drawing.Imaging" %> <%@ Import Namespace="System.Drawing.Text" %> <%@ Import Namespace="System.Math" %>
<script runat="server"> Private Sub Page_Load(ByVal Sender As System.Object, ByVal E As System.EventArgs)
Dim BMP As System.Drawing.Bitmap Dim Resim As System.Drawing.Graphics Dim Yazi As System.Drawing.Font
Dim Deger() As String Dim Sayi As String Dim Gorun As String
Dim Ibare() As String Dim Metin As String
Dim Toplam As Single Dim DegerOran As Single Dim YuzdeOran As Single
Dim yiX As Integer Dim y1B As Single Dim y1S As Single
Sayi=Request.QueryString("sayi") Deger=Split(Sayi,"-")
Metin=Request.QueryString("metin") Ibare=Split(Metin,"-")
Gorun=Request.QueryString("gorun")
BMP=New Bitmap(360, 110) Resim=System.Drawing.Graphics.FromImage(BMP) Yazi=New Font("Verdana", 8, FontStyle.Regular) Resim.Clear(Color.White)
For yiX=0 To UBound(Deger) Toplam = Toplam + Deger(yiX) Next
DegerOran=360/Toplam YuzdeOran=10000/Toplam
For yiX=0 To UBound(Deger) y1B=y1B + y1S y1S=Deger(yiX) * DegerOran If Gorun="yuzde" Ibare(yiX)=Ibare(yiX) & " (% " & CInt(Deger(yiX) * YuzdeOran)/100 & ")" End If If Gorun="deger" Ibare(yiX)=Ibare(yiX) & " (" & Deger(yiX) & ")" End If Select Case yiX Case 0 Resim.FillPie(Brushes.Red, 5, 5, 100, 100, y1B, y1S) Resim.FillRectangle(Brushes.Red, 115, (13*yiX)+5, 9, 9) Case 1 Resim.FillPie(Brushes.Green, 5, 5, 100, 100, y1B, y1S) Resim.FillRectangle(Brushes.Green, 115, (13*yiX)+5, 9, 9) Case 2 Resim.FillPie(Brushes.Blue, 5, 5, 100, 100, y1B, y1S) Resim.FillRectangle(Brushes.Blue, 115, (13*yiX)+5, 9, 9) Case 3 Resim.FillPie(Brushes.Brown, 5, 5, 100, 100, y1B, y1S) Resim.FillRectangle(Brushes.Brown, 115, (13*yiX)+5, 9, 9) Case 4 Resim.FillPie(Brushes.Yellow, 5, 5, 100, 100, y1B, y1S) Resim.FillRectangle(Brushes.Yellow, 115, (13*yiX)+5, 9, 9) Case 5 Resim.FillPie(Brushes.Gray, 5, 5, 100, 100, y1B, y1S) Resim.FillRectangle(Brushes.Gray, 115, (13*yiX)+5, 9, 9) Case 6 Resim.FillPie(Brushes.Magenta, 5, 5, 100, 100, y1B, y1S) Resim.FillRectangle(Brushes.Magenta, 115, (13*yiX)+5, 9, 9) Case 7 Resim.FillPie(Brushes.Orange, 5, 5, 100, 100, y1B, y1S) Resim.FillRectangle(Brushes.Orange, 115, (13*yiX)+5, 9, 9) End Select Resim.DrawRectangle(Pens.Black, 115, (13*yiX)+5, 9, 9) Resim.DrawString(Ibare(yiX), Yazi, Brushes.Black, 127, (13*yiX)+3) Next
Response.ContentType="image/bmp" BMP.Save(Response.OutputStream, ImageFormat.Gif)
Resim.Dispose() BMP.Dispose()
End Sub
</script> |
| |  | |  |
   | |  | | 3. 13.07.2005 15:30 @ekomut
| güzel ... |
| |  | |  |
   | |  | | 5. 30.05.2007 14:44 @tuncay
| keske kod satirlarinin yanina aciklmalarda eklenseydi,bu kadar islem olan kodu çözmek başkalari için sıkıntı olabiliyor.Ozellikle de bir c# programcisi olarak vb ile yazılmıs kodu.Yine de cok işe yarayacak kodlar teşekkürler! |
| |  | |  |
  | |  | | 6. 09.03.2008 13:53 @Mustafa Güven
| yukarıdaki grafik yapısını c#'a çevirdim, boyutlarıyla oynadığımdan biraz daha büyük gözükecektir, değiştirirsiniz. Bununla beraber c#'ta nasıl herhangi bir veri kaynağından data alarak bunu piechart'a doldurabileceğimizle ilgili bir örnek yapıp buraya koymayı planlıyorum. Umarım şimdilik bu işinize yarar.
Ufuk yayla'ya da teşekkürler.
protected void Page_Load(object sender, EventArgs e) { Bitmap BMP; Graphics Resim; Font Yazi;
string[] Deger, Ibare; string Sayi, Gorun, Metin;
int DegerOran = 0, YuzdeOran = 0; int Toplam = 0, y1B = 0, y1S= 0; Sayi = Request.QueryString["sayi"]; Deger = Sayi.Split('-');
Metin = Request.QueryString["metin"]; Ibare = Metin.Split('-'); Gorun = Request.QueryString["gorun"]; BMP = new Bitmap(800,600); Resim = Graphics.FromImage(BMP); Yazi = new Font("Verdana",8,FontStyle.Regular); Resim.Clear(Color.White);
for (int yiX = 0; yiX < Deger.Length; yiX++) { Toplam += Convert.ToInt32(Deger[yiX]); }
DegerOran = 360 / (int)Toplam; YuzdeOran = 10000 / (int)Toplam;
for (int yiX = 0; yiX < Deger.Length; yiX++) { y1B += y1S; y1S = Convert.ToInt32(Deger[yiX]) * DegerOran; if(Gorun == "yuzde") Ibare[yiX] = Ibare[yiX] + " (% " + Convert.ToInt32(Deger[yiX]) * YuzdeOran / 100 + ")"; if(Gorun == "deger") Ibare[yiX] = Ibare[yiX] + " (" +Deger[yiX] + ") "; switch (yiX) { case 0: Resim.FillPie(Brushes.Red,5,5,400,400,y1B,y1S); Resim.FillRectangle(Brushes.Red, 115, (13*yiX) + 5 , 9, 9); break; case 1: Resim.FillPie(Brushes.Green,5,5,400,400,y1B,y1S); Resim.FillRectangle(Brushes.Green,115,(13*yiX) + 5, 9, 9); break; case 2: Resim.FillPie(Brushes.Wheat, 5, 5, 400, 400, y1B, y1S); Resim.FillRectangle(Brushes.Wheat, 115, (13 * yiX) + 5, 9, 9); break; case 3: Resim.FillPie(Brushes.Blue,5,5,400,400,y1B,y1S); Resim.FillRectangle(Brushes.Blue, 115, (13*yiX) + 5,9,9); break; case 4: Resim.FillPie(Brushes.Yellow,5,5,400,400,y1B,y1S); Resim.FillRectangle(Brushes.Yellow,115,(13*yiX) + 5, 9, 9); break; case 5: Resim.FillPie(Brushes.Orange,5,5,400,400,y1B,y1S); Resim.FillRectangle(Brushes.Orange, 115, (13*yiX) + 5,9,9); break; case 6: Resim.FillPie(Brushes.SkyBlue,5,5,400,400,y1B,y1S); Resim.FillRectangle(Brushes.SkyBlue,115,(13*yiX) + 5, 9, 9); break; case 7: Resim.FillPie(Brushes.WhiteSmoke,5,5,400,400,y1B,y1S); Resim.FillRectangle(Brushes.WhiteSmoke, 115, (13*yiX) + 5,9,9); break; }
Resim.DrawRectangle(Pens.Black,115,(13*yiX)+5,9,9); Resim.DrawString(Ibare[yiX],Yazi,Brushes.Black,127,(13*yiX)+3);
} Response.ContentType = "image/bmp"; BMP.Save(Response.OutputStream, ImageFormat.Gif); Resim.Dispose(); BMP.Dispose(); } |
| |  | |  |
  | |  | | 7. 23.05.2008 20:34 @merve
| ımageformat.gif satrında hata veriyo ne yapabilirimm |
| |  | |  |
  | |  | | 8. 23.05.2008 20:44 @merve
| system.drawing.ımaging.ımageformat.gif yazdım ordaki hata düzeldi :)
|
| |  | |  |
  | |  | | 9. 07.07.2008 12:29 @Remzi
| Allah Razı olsun elinize sağlık fikrinize sağlık |
| |  | |  |
  | |  | | 10. 16.03.2009 22:42 @xmennn
| ASP.NET C# kodu olanı lazım bana :-( Güzel bi uygulama gibi gözüküyor c# kodu olmadan anlayamıyorum |
| |  | |  |
  | |  | | 11. 17.03.2009 08:27 ufukyayla
| @Mustafa Güven'e ait yorumda C# kodu var. |
| |  | |  |
  | |  | | 12. 17.03.2009 09:00 ekomut
| :) microsoftun Chart kontolünü kullan sen |
| |  | |  |
  | |  | | 13. 16.04.2009 10:31 @Ozkan Duygu
| c# kodunda %4 lük bir kayıp var... kullananlacakların haberi olsun.... |
| |  | |  |
  | |  | | Sayfalar : (1inci sayfadasınız) [1] | |  | |  |
 |