C# & VB.Net / C# ile MSChart Control

Yazar:   Derya Nur Ulus
Tarih:   
Puan:   4 / 5
Verdiğiniz Puan:   

Makale Özeti

Bu makalede C# kullanılarak Visual Studio nun pratik grafik çizdirme aracı olan MSChart Control anlatılacaktır.

Makale

MSChart Control, C# yada Visual Basic ile Visual Studio da grafik çizdirebileceğimiz pratik araçlardan birisidir. Sevdiğim özelliklerinden bir tanesi de excel de grafikleri çizdirirken yaşadığımız maksimum 32000 veri çizdirme sınırı burada yok. Örnek verecek olursak herbiri 84000 küsür veriden oluşan 6 seriyi ( yaklaşık yarım milyon veri eder ) rahatlıkla çizdirebilme özelliğine sahip.Bu özellği kullanabilmek içim import etmemiz gereken kütüphane :

using System.Windows.Forms.DataVisualization.Charting;

Örnek olarak bir Line Chart oluşturalım ve MSChart Control ün birkaç özelliğini bunun üzerinde inceleyelim :

Öncelikle toolbox dan Chart ı seçerek daha önce oluşturduğumuz windows formun üzerine sürükleyip bırakıyoruz.

1

Chart Tipini Seçme

Chart ın üzerine tıklayarak sağ taraftaki Properties penceresine bakalım.Orada Series->Chart Type yolunu takip edersek bu kontrolle çizdirebileceğimiz diğer grafik çeşitlerini de görebilirsiniz.Biz örnek olarak Line Chart ı seçeceğiz.

2

Series

3

Yine aynı pencerenin sol tarafından Add diyerek yeni seriler ekleyebilir bunların özelliklerini sağdaki pencereden kolaylıkla seçebiliriz.Örneğin grafiğimizde bu seriyi temsil eden çizgimizin kesik kesik olmasını istiyorsak BorderDashStyle’ı Dash, eğer düz çizgi olmasını istiyorsak Solid i seçeriz.Bunların dışındaki seçenekleri BorderDashStyle kısmında bulabilirsiniz.

Serilere Değer Ekleme

Eğer daha önce değerleri initiliaze edilmiş 2 array imiz varsa :

chart1.Series["Series1"].Points.DataBindXY(array1,array2);

yazabiliriz.Burada array1 deki değerler x eksenine,array2 deki değerler ise y ekseninde Series1 e atanır.Eğer değerleri tek tek eklemek istiyorsak :

chart.Series["Series1"]Points.AddXY(array1[5],array2[6]); yada

chart.Series["Series1"]Points.Add(array1[5]); // sadece y değerini ekler

İnterval leri Belirlemek

X ekseninde yada Y ekseninde hangi aralıklarla etiketleme yapacağımızı belirlemek için bu özellik kullanılır.

chart1.ChartAreas["ChartArea1"].CursorX.Interval = 1;

bu x eksenindeki her değeri etiketlemesi anlamına gelir.Eğer 2 olsaydı 2 x değerinde bir etiketleyecekti.Y ekseni için :

chart1.ChartAreas["ChartArea1"].CursorY.Interval = 0.001;

Etiketlemeyi 0 dan değilde direk serilere yada x eksenine atadığımız minimum değerden başlatmak için:

chart1.ChartAreas["ChartArea1"].AxisY.IsStartedFromZero = false; // Y ekseni için

chart1.ChartAreas["ChartArea1"].AxisX.IsStartedFromZero = false; // X ekseni için

Eğer true olursa etiketlemeye 0 dan başlar.

X ve Y Eksenlerinin Etiketlerinin Açılarını Belirlemek

Örneğin x ve y eksenlerinin etiketlemelerini –45 derecelik açıyla yazdıralım :

chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Angle = -45;
chart1.ChartAreas["ChartArea1"].AxisY.LabelStyle.Angle = -45;

Chart ın Üzerinde Tıklanılanılan Noktanın Pixel Kordinatlarını Bulmak

Bunun için öncelikle mschart kontrollerinin eventlerini kullanarak mouse un chart üzerine tıklanmasıyla tetiklenecek bir event oluşturuyoruz:

4

Chart ın üzerine tıklayıp sağda Properties penceresinden yukarıdaki gibi yıldırım işaretini seçtiğimizde eventlerimizin listesini görebiliriz.Oradan MouseClick i seçip yanındaki boşluğa çift tıkladığımızda arka planda kodunu bizim için otomatik oluşturacak:

5

Cursor ın X ve Y değerlerini elde etmek için :

pixX = e.Location.X;
pixY = e.Location.Y;

Zoom ( Yakınlaştırma )  Özelliği

MSChart da belirli noktaları daha yakından incelemek için bu özellik kullanılır. Örneğin x ekseninde 3 ile 10 noktaları arasına yakınlaşmak için :

chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoom(3,10);

Y ekseninde herhangi 2 nokta arasına yakınlaşmak için :

chart1.ChartAreas["ChartArea1"].AxisY.ScaleView.Zoom(3,10);

Pixel Değerlerinden X ve Y Eksenindeki Değerleri Elde Etmek Ya da Tam Tersi

Pixelden Chart daki x ve y değerlerini elde etmek için :

yAxisValue = chart1.ChartAreas["ChartArea1"].AxisY.PixelPositionToValue(ChartUzerindekiHerhangiBirPixel);
xAxisValue = chart1.ChartAreas["ChartArea1"].AxisX.PixelPositionToValue(ChartUzerindekiHerhangiBirPixel);

Chart daki x ve y değerlerinden pixel değerlerini elde etmek için :

pixel1 = chart1.ChartAreas["ChartArea1"].AxisY.ValueToPixelPosition(deger);
pixel2 = chart1.ChartAreas["ChartArea1"].AxisX.ValueToPixelPosition(deger);

MSChart Üzerinde Mouse ile Tıklanılan Noktaya Yakınlaşmak (Zoom)

Önce cursor ımızın tıklandığı noktanın pixel değerlerini alıyoruz :

pixX = e.Location.X;
pixY = e.Location.Y;

Daha sonra onların chart daki o noktaya karşılık gelen değerlerini buluyoruz  :

yAxis = chart1.ChartAreas["ChartArea1"].AxisY.PixelPositionToValue(e.Location.Y);
xAxis = chart1.ChartAreas["ChartArea1"].AxisX.PixelPositionToValue(e.Location.X);

Bulduğumuz noktaya yakınlaşıyoruz:

chart1.ChartAreas["ChartArea1"].AxisY.ScaleView.Zoom(yAxis - 5, yAxis + 5);
chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoom(xAxis - 5, xAxis + 5);

 

Eksenlere etiketleme işlemini yapıyoruz :


chart1.ChartAreas["ChartArea1"].AxisY.Interval = deger1;
chart1.ChartAreas["ChartArea1"].AxisX.Interval = deger2;

MSChart ile ilgili daha pekçok özellik anlatılalabilir.Şimdilik burada bitirelim.Umarım faydalı olur..

Site içerisinde yazılan tüm makalelerin yazım ve yayınlama hakkı aksi belirtilmediği sürece sadece yazarlara aittir.

v3.0 Geri Bildirim (Feedback) Yazgelistir.Com Ekibi - 2012 - Yazgelistir.com