2 Nisan 2009 Perşembe

gnuplot - esaslı grafik çizdirme programı

merhabalar, bu yazımızda özgür yazılım camiasının göz bebeklerinden birisini tanımaya çalışacağız. gnuplot, komut satırı tabanlı, veri ve fonksiyon grafiği çizdirme uygulamasıdır diyebiliriz. 1986'dan beri geliştirilen ve gün geçtikçe güçlenen; UNIX, IBM OS/2, MS Windows, DOS, Macintosh, VMS, Atari ve bunlardan başka bir çok sistemde çalışabilen bir uygulama. 2 boyutlu ve 3 boyutlu grafikler oluşturabiliyor. vektör, yüzey, çizgi, izdüşüm vs. bir çok farklı grafik tipi türetebiliyor ve ürettiği bu grafikleri bir çok output yöntemiyle dışa aktarabiliyor: ekrana görüntü olarak, dosya olarak(eps, fig, jpeg, LaTeX, metafont, pbm, pdf, png, postscript, svg ...), direkt çıktı olarak, web'de. eğer tüm bunlardan başka fantastik bir çıktı alma opsiyonunuz varsa o cihaza da kolayca uyum sağlayabilir. bu profesyonel özellikleriyle bir çok ciddi projede, kurumda, bilimsel araştırmada yoğun olarak kullanılmaktadır.

öncelikle paket yöneticisinden “gnuplot”u aratıp, kuruyoruz. artık kullanıma hazır etkileşimli bir komut satırı bizi bekliyor. python diliyle ilgilenmiş olanlar için, bu etkileşimli komut satırı tanıdık gelecektir. evet hemen bir konsol açmak için sabırsızlanıyoruz. konsolu açıp, gnuplot yazıp enter'liyoruz.

evet gnuplot komut satırına giriş yapmış durumdayız. kodlarımızı buradan gireceğiz. ve girdiğimiz komutların ardından ekrana grafiğimiz yeni bir pencere içerisinde gelecek. uygulamadan çıkmak içinse ctrl+d tuş kombinasyonunu kullanabiliriz. bu arada, programımızın özellikleri, yetenekleri saymakla bitmeyeceği için ben sadece bir parmak bal çalma çabası içerisinde olacağım. vereceğim örnekleri ve kendi türeteceğiniz örnekleri müteaddit defalar deneyerek eğlenerek öğreneceğinizi umuyorum.

ilk uygulama için sabırsızlanıyoruz. “hello world” yazmayacağız. onun yerine, basitçe bir grafik çizdirelim. mesela, sin(x)*cos(x)'in grafiği. plot sin(x)*cos(x) yazıp enter'lamamız yeterli.

grafiğimizin gösterileceği alanı sınırlamak istersek plot [-pi/2:pi/2] [-pi/2:pi/2] sin(x)*cos(x) şeklinde sınırlandırma da yapabiliriz. yani grafiğimizin sadece bizim belirlediğimiz bölgesi görüntüleniyor ve zoom'lanıyor gördüğünüz gibi. birinci [] ifadesinin içerisine x ekseninin başlangıç ve bitiş sınırları araya : konularak yazılıyor. ikinci [] için de aynı değerleri y ekseni için giriyoruz. bu ilk uygulamamızda plot komutu ile çizdirdik grafiği. plot, gnuplot'un 2 boyutta çalışan çizdirme komutudur.


ilk örneğimizde tek değişkenli bir grafik çizdirdik. şimdi çok parametreli bir grafik çizdirelim. plot x**2+5*x+4, x**3-7, 15*x+5. ifademizi inceleyelim. plot komutunun ardından, virgüllerle ayırarak istediğimiz sayıda fonksiyon yazarak bunların grafiğini çizdirebiliyoruz. gene bu kodumuzda da sınırlar belirtebilirdik. ancak bu konuyu önceki örnekte öğrendiğimiz için gerek görmedim. bu arada ** sembolümün ^ yani kuvvet anlamına geldiğini hatırlatalım. (2**3=8, x**2= x kare)

şimdi fantezi boyutumuzu bir basamak daha ilerletiyoruz ve üç boyutlu grafiklere geçiyoruz. 3 boyutlu grafikleri çizdirmek için ise plot'un yerine splot komutunu kullanacağız. ve artık x'in yanında bir de y değişkenimiz oldu. yani iki değişkenden gelen değerler işlenebilecek. ve tabi ki az önceki örneğimizde yaptığımız gibi virgüllerle ayırarak birden çok fonksiyonu gösterebiliyoruz.

x*y gibi basit bir ifadeyle başlayalım 3. boyuta isterseniz. splot x*y. ve artık 3. boyuta geçtiğimizi anlamak istiyoruz. bunun için fareyi grafik alanına basılı tutarak çevirelim. veya ok tuşlarını da kullanabilirsiniz. hmm, işte şimdi biraz eğlenceli olmaya başladı. o zaman tadında bırakalım.

bu yazımda, çok sınırlı özellikleri anlatabildim ve bu programla yapabileceklerimizin yanında bunlar hiç bir şey. devamı sizin ellerinizde. http://gnuplot.sourceforge.net/demo_4.3/ bu örnekleri inceleyerek, özgür bir yazılımın ne kadar farklı amaçlara uygun olarak kullanılabileceğini görebilirsiniz.

gnuplot'un münevver geliştiricilerine ve siz müşfik okurlara teşekkür ediyorum. bu arada, bu yazıyı hazırlarken, aldığım ekran görüntülerini küçültmek için kısacık bir python programcığı kullandım. ve bu vesileyle bir kez daha python'a sevgilerimi sunuyorum. kodu da yazayım şuracığa.

import glob

import Image

for infile in glob.glob("*.png"):

im = Image.open(infile)

im.thumbnail((256,256), Image.ANTIALIAS)

if infile[0:2] != "t_":

im.save("t_" + infile, "PNG")

gplot'un resmi sitesi http://www.gnuplot.info 'dan çok çeşitli örnekleri inceleyebilir, farklı tip grafik çeşitleri oluşturmayı öğrenebilir, sağlam tutorial'lerini indirebilir ve programa ek özellikler katan 3. parti eklentilere ulaşabilirsiniz. size bir kodla veda ediyorum. bunu kopyala, yapıştır ile gnuplot komut satırına yapıştırıp çalıştırabilirsiniz.

çizim dolu günler.

set dummy u,v

set parametric
set urange [ -pi : pi ] noreverse nowriteback
set vrange [ -pi : pi ] noreverse nowriteback
splot cos(u)+.5*cos(u)*cos(v),sin(u)+.5*sin(u)*cos(v),.5*sin(v) with lines, 1+cos(u)+.5*cos(u)*cos(v),.5*sin(v),sin(u)+.5*sin(u)*cos(v) with lines


Hiç yorum yok:

Yorum Gönder