Deniz Özkan | C# Dilinde ZedGraph Kullanımı
15367
post-template-default,single,single-post,postid-15367,single-format-standard,ajax_fade,page_not_loaded,,footer_responsive_adv,qode-theme-ver-14.2,qode-theme-bridge,disabled_footer_top,wpb-js-composer js-comp-ver-5.4.7,vc_responsive

C# Dilinde ZedGraph Kullanımı

C# Dilinde ZedGraph Kullanımı

ZedGraph açık kaynak bir yazılımdır ve ilgili dll yüklendiğinde (buradan indirebilirsiniz) C# dilinde grafik çizdirmek amacıyla, Microsoft’un kendi kontrollerinden daha esnek ve daha verimli şekilde kullanılabilir. İlgili dll’i projemize ekledikten sonra Toolbox menüsünden “General” başlığına sağ tıklayıp, “choose Items” diyoruz.Açılan Freamwork içerisinden “zedgraphControl” seçeneğinin tick ini seçip “OK” diyoruz. Böylece Component’imiz aktif hale gelmiş oluyor. Artık Toolbox menüsünde “General” başlığı altında “ZedGraphControl” Componentimizi bulabiliriz.

Formumuza ZedGraph’ı ekledikten sonra sıra içeriği düzenlemeye geliyor.

x ekseninde zaman değerlerinin olduğu, y ekseninde ise double değerlerin olduğu bir line chart hazırlayalım. Her iki eksende de başka tür değişkenler olabilir.

Ekranda “Title” olarak görünen grafiğin başlığını :

myPane.Title.Text = "Örnek Line Chart";

x ve y eksenlerinin başlıklarını :

myPane.XAxis.Title.Text = "Zaman";

myPane.YAxis.Title.Text = "Değerler"

serilerin isimlerinin ve renklerinin bulunduğu legend in pozisyonunu ve diğer özelliklerini:

myPane.Legend.Position = LegendPos.Bottom;

myPane.Legend.FontSpec.Size = 8; // legend daki yazının boyutu

Eksenlerin değişken tiplerinin/formatlarının belirlenmesini:

myPane.XAxis.Type = ZedGraph.AxisType.Date; 
myPane.XAxis.Scale.Format = "HH:mm:ss";

Örneğin x ekseninde değerlerin hangi parametreye göre artacağının belirlenmesinde:

myPane.XAxis.Scale.MajorUnit = DateUnit.Second;

bu kodlar kullanılabilir.

Elimizde zaman değerlerinin bulunduğu DateTime[] tarihSaat adlı bir arrayimiz olsun. Bu değerleri x eksenine nokta olarak ekleyebilmemiz için double değerlere çevirmemiz gerekli. Bunun için XDate değişken tipini kullanıyoruz. Yeni zaman arrayimizi oluşturalım:

for (int i = 0; i < tarihSaat.Length; i++) 
{

  doubleZamanArray[i] = (double)new XDate(tarihSaat[i].Year, tarihSaat[i].Month, tarihSaat[i].Day, 
  tarihSaat[i].Hour, tarihSaat[i].Minute, tarihSaat[i].Second); 
}

x ekseni yeni oluşturduğumuz zaman arrayindeki değerlerden, y ekseni ise daha önce oluşturduğumuz rastgele double değerlerden oluşan bir line chart çizmek için nokta çiftlerimizi oluşturalım:

public PointPairList createPairPointList(double[] zaman, double[] ydegerleri) 
       { 
           PointPairList p = new PointPairList();

           for (int i = 0; i < doubleZamanArray.Length; i++) 
           { 
               p.Add(doubleZamanArray[i],ydegerleri[i]); 
           }

           return p; 
       }
GraphPane myPane = zedGraphControl1.GraphPane; // beyaz grafik alanını temsil eder 
LineItem myCurve ; // grafik alanına eklenecek herbir çizgi grafiği

x eksenindeki ilk ve son değerin atanması :

myPane.XAxis.Scale.Min = doubleZamanArray[0]; 
myPane.XAxis.Scale.Max = doubleZamanArray[doubleZamanArray.Length - 1];

Yukardaki işlemi yapmamızın nedeni, zedgraph çoğunlukla kendine göre bir aralık belirlediğinden grafikte bazen son değerlerimizi göremeyebiliriz. Bunu garanti etmek için bu işlemi gercekleştirdik

PointPairList tempPointPairList = createPairPointList(doubleZamanArray, ydegerleri); // oluşturduğumuz geçici tempPointPairList  değişkeninin nokta değerlerinin atanması
myCurve = myPane.AddCurve("Name of series", tempPointPairList, Color.Green, SymbolType.None);

Burada ilk değişken çizdirdiğimiz serinin (x ekseni zaman değerlerinden y ekseni double değerlerden oluşan nokta çiftlerimiz birer seridir ) ismi, ikinci değişken noktaların değerleri, üçüncü değişken serimizi grafik ekranında hangi renk görmek istediğimiz, son değişkeninimiz ise serimizi düz çizgi mi yoksa kesik kesik mi nasıl görmek istediğimizi belirtir. Ben burada “SymbolType.None” diyerek düz çizgi halinde görmek istediği, serimin üzerine * gibi herhangi bir sembol vs eklenmemesi gerektiğini belirtmiş oluyorum. None yerine aşağıdakilerden herhangi birini de seçebilirdik:

myCurve değşkenimizi kullanarak daha sonrada serimize ait değişiklikleri yapabilriz.

 myCurve.IsVisible = true; 
 myCurve.Line.Width = 3f;

Bu seriye ait y ekseninin oluşturulması ve eklenmesi:

YAxis yAxis4 = new YAxis("Name of series");  
yAxis4.Color = Color.Green;  
yAxis4.IsVisible = false;  
myPane.YAxisList.Add(yAxis4);

Bu eksenin indexinin, çizdirdiğimiz seriye ait olduğunun bildirilmesi:

myCurve.YAxisIndex = myPane.YAxisList.Count - 1;

Eksenlerde yada serilerde bir degişiklik yaptımızda, bu değişikliği zedgraph a haber vermek için çağırmamız gereken fonksiyonlar :

zedGraphControl1.Invalidate(); 
zedGraphControl1.AxisChange();

Grafiği baştan çizdirmek içinse:

zedGraphControl1.Refresh();

kullanılır.

Double click eventinin içerisine aşağıdaki kod un yazılmasıyla, grafik üzerinde daha önce fare ile yakınlaştığınız tüm karelerden çift tıklamayla eski haline dönebilirsiniz :

private void zedGraphControl1_DoubleClick(object sender, EventArgs e) 
{ 
          zedGraphControl1.ZoomOutAll(myPane); 
}

Hiçbir düzenleme yapmadığımızda varsayılan olarak ( x değeri, ydeğeri ) şeklindedir. Bu yazıyı düzenleyebilmek için PointValueEvent i düzenliyoruz. Örneğin x değeri, çizdirdiğimiz serinin ismi, y değeri şeklinde yeniden düzenleyelim:

zedGraphControl1.PointValueEvent += new ZedGraph.ZedGraphControl.PointValueHandler(zedGraphControl1_PointValueEvent);

string zedGraphControl1_PointValueEvent(ZedGraphControl sender, GraphPane pane, CurveItem curve, int iPt) 
{ 
  return XDate.XLDateToDateTime(curve[iPt].X).ToString() + " ; " + curve.Label.Text + " ; " + basamakSayisiKirpma(curve[iPt].Y.ToString());
}

ZedGraph dll’inin kullanımı bu şekildedir. İsteğinize göre düzenleme yapabilirsiniz.

Henüz yorum yok

Yorum yapmak ister misiniz?