Gnuplot

Komut satırından girilen fonksiyon (f(x)=x, f(x)=x+5, f(x)=sin(x) vb.) ve/veya önceden oluşturulmuş verilere göre grafik çizme programına gnuplot denir. GNU/Linux işletim sistemi üzerinde çalıştırılabilmektedir.

Gnuplot Özellikleri

  • Doğrudan ekran çıktısı olarak ya da PNG, JPEG gibi diğer formlarda da kaydedilerek görüntülenebilir.
  • Farklı komutlar birbirleriyle ilişkili olarak kullanılabilir.
  • Program çok fazla kullanıcı tarafından kullanıldığı için internette kapsamlı yardım bulmak mümkündür.

Microsoft Office programları kullanan kişiler gnuplot yerine excel programını tercih etmeyi düşünebilirler. Excel basit grafiklerin oluşturulması için kullanışlı bir program gibi görülebilir. İçerdiği şablonlar ile grafik türü seçimi kolay ve görsel olarak da daha basit işlem yapmayı sağlar. Fakat oluşturulabilecek grafikler bu şablonlar ile sınırlıdır ve karmaşık veriler kullanılarak grafik çizdirmek gnuplot programına göre daha zordur. Bu nedenle kompleks grafikler çizdirmek için gnuplot kullanmak daha faydalıdır. gnuplot ile grafik üzerinde oynamalar yapmakta oldukça kolaydır. Grafiğe başlık eklenebilir; x ve y eksenleri, grafik üzerindeki nokta ve/veya çizgiler, verilerin isimleri için değişiklik yapılabilir. Bunlar, yazı değişikliği, ekleme-çıkarma, renk, boyut, tip vb. değişikliklerdir.

Şekil 4.N

{title="Tablo 4.1 Gnuplot ile çizilen bir grafiğin aynısını Excel'de çizmek için yapılması gereken işlemler"}

GNUPLOT EXCEL
Terminalde gnuplot yazılır ve - Dosya1 ve dosya2deki veriler tablo
interaktif gnuplot terminaline halinde Excelde yan yana
girilir. Ardından aşağıdaki komutlar yerleştirilir. Dosya1'in ikinci
yazılır: kolonundaki değerler Excel formül
yardımıyla 2’ye bölünerek yeni
set terminal png size 600,400 bir kolon oluşturulur.
set output "test.png"
set ylabel "Değer" rotate by 75 - Kolonlar seçilerek Charts
set mxtics 4 altında Line Charts seçilerek
set mxtics 4 grafik çizdirilir.
set key left reverse title "Legend"
- Çizilen grafikte eksenleri
plot 'dosya1' using 1:($2/2) with ayarlamak için Charts altında
lines title "deney1", 'dosya2' Data bölümünden Select'e
using 1:2 with points title tıklanır.
"deney2" Burada Series için x ve y değerleri
seçilir ve name kısmına istenilen
isimler (deney1,deney2) girilir.
- Deney2'ye ait veriler grafik
üzerinde tıklanarak seçilir ve
Charts altında Scatter seçilerek
çizgi olan grafik noktasal
gösterime çevrilir. Bu çevirim
işleminden sonra oluşan ikincil x
ve y eksenleri Chart Layout'tan axis
kısmından seçilerek kaldırılır.
- Chart Layout'tan Axis Title
başlığı altından Primary
Vertical Axis Title seçilerek y
eksenine başlık eklenir. Başlık
olarak "Değer" yazıldıktan sonra
başlığa sağ tıklanarak format
axis title seçilir. Text box
başlığı altında custom angle 75
olarak ayarlanır.
- X-eksenindeki axise sağ
tıklanarak Format Axis seçilir.
Ticks kategorisinden "minör tick
mark type
outside" olarak seçilerek minör
tikler eksene eklenir. Not: Excel
2011'de minor tiklerin sıklığının
ayarlanması karmaşıktır.
- Legend istenilen yere elle manuel
olarak taşınabilir ya da üzerine
çift tıklanarak açılan ekrandan
placement kısmından yer seçilir.
Not: "Show the legend without
overlapping the chart" opsiyonu
işaretlenmemiş olmalıdır.
- Legende başlık ekleme opsiyonu
Excel 2011'de bulunmamaktadır.
- Grafik resim olarak kaydedilmek
isteniyorsa üzerine sağ tıklanarak
Save as Picture seçilir. Format
olarak png seçilerek kaydedilir.
Boyut ayarlamak için png resmi
açılır. Araçlardan boyut ayarlama
seçilerek istenilen pikseller
girilerek boyut ayarlanır.

gnuplot kullanmak için üç farklı yöntem bulunmaktadır. Bunlar;

  1. Terminale gnuplot yazarak giriş yapılır. Grafik için istenilen tüm özellikler sırası ile komut satırına yazılır. En son plot komutu ile istenilen grafik çizdirilir. plot komutuna kadar yazılan tüm özellikler grafikte olacaktır. plot komutundan sonra yazılan özellikler ise bir sonraki plot komutuna kadar kullanılmaz. Burada oluşturulan grafikler özellikler belirtilmediği sürece kaydolmaz. Resim olarak kaydetmek isteniyorsa set output komutu kullanılmalıdır. Yazılan tüm satırların kaydedilmesi isteniyor ise de en sonuna save komutu yazılmalıdır. Linux hesabından çıkış yapılmadığı sürece gnuplot içinde yazılmış tüm satırlar kayıt altında tutulur.
  2. Macro çıktıyı görmek için en uygun yöntemdir. set output komutu ile grafik dosyaya gönderilebilir.
  3. Oluşturulan bir dosya ile grafik çizdirilir. nano komutu ile açılan bir dosyaya grafik için istenilen tüm özellikler, grafiğin kullanacağı veriler yazılarak kaydedilir. Grafiğin çizdirilmesini sağlayan komut plot komutu, istenilen özelliklerin belirtildiği komut ise set komutudur. plot komutundan önce istenilen tüm özellikler belirtilmelidir. Komuttan sonra yazılan özellikler grafik oluşturulurken dikkate alınmaz. Herhangi bir özellik belirtilmeden plot komutu direkt olarak yazılır ve grafik için gereken veriler belirtilirse, grafik çizdirilirken varsayılan değişkenler kullanılır. Oluşturulan grafiğin hangi isimle kaydedileceği de plot komutundan önce, set output komutu ile belirtilmelidir. Komut kullanılırken dosya isimleri tek tırnak ('), yazılar çift tırnak (") ile belirtilir. Png formatında çıktı alınmak isteniyorsa en başta istenen boyut size komutu ile belirtilmelidir. Oluşturulan grafikler terminal de görüntülenemez. Bunun için winscp kullanılmalıdır.

gnuplot-ornek1.txt

$ nano grafik01

set terminal png size 500,500
set output 'grafik01.png'
plot x


$ gnuplot grafik01

Bu aşamada f(x)=x grafiği png formatında kaydedilir. Grafiği görüntülemek için winscp ile grafiği kaydedildiği dosyaya gelinir ve dosya bilgisayara taşınarak grafik görüntülenir. Grafik bilgisayara kopyalandıktan sonra winscp içinde değil doğrudan bilgisayardan açılmalıdır.

gnuplot ile değişiklik yapılabilecek özellikler aşağıda maddeler halinde anlatılacaktır. Özelliklerin üzerinde gösterileceği örnek grafik aşağıdaki gibidir.

gnuplot-ornek2.txt

$ nano ornekgrafik
set terminal png size 400,300
set output 'ornekgrafik.png'
plot x**2-20, tan(x)

$ gnuplot ornekgrafik

Şekil 4.3 gnuplot grafik

Grafik özelliklerindeki değişiklikler;

Başlık

Grafiklere başlık eklemek için set title komutu kullanılarak yazılması istenen başlık adı çift tırnak (") içinde belirtilir. Yazı tipi font komutu, yazı rengi tc (ing. text color) komutu ile ayarlanırken yazı içerisinde kullanılan sembollerin olması gerektiği gibi görünmesi de enhance komutu ile ayarlanır. Yazı rengini değiştirmek için tc komutu ile kullanılabilecek iki seçenek vardır. Bunlardan biri olan lt (ing. linetype) yanına sayı yazılır ve bu sayılar önceden atanmış yazı tipi ve rengi olarak kullanılır. Diğeri ise rgb opsiyonudur ve istenilen rengin adı (red, green, blue gibi) veya rengin kodu (hexadecimal kod halinde)yazılır.

lt komutu için oluşturulmuş renk ve şekil kataloğu aşağıdaki gibidir.

{id="gnuplot-lt"} Şekil 4.4 lt komutu renk ve şekil kataloğu

Örnekler

{lang="gnuplot"}

gnuplot-baslik1.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-baslik1.png'
set title "x^2-20 ve Tan(x)"
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-baslik2.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-baslik2.png'
set title "x^2-20 ve Tan(x)" tc rgb "green"
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-baslik3.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-baslik3.png'
set title "x^2-20 ve Tan(x)" font "arial,18"
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-baslik4.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-baslik4.png'
set termoption enhanced
set title "x^2-20 ve Tan(x)" 
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-baslik5.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-baslik5.png'
set termoption enhanced
set title "x^2-20 ve Tan(x)" tc lt 3 font "arial,18" 
plot x**2-20, tan(x)


Eksen isimleri

Grafik eksenlerine isim eklemek için set xlabel ve ylabel komutları kullanılarak yazılması istenen başlık adı çift tırnak (") içinde belirtilir. Yazı tipi font komutu, yazı rengi tc (textcolor) komutu, yazının eksene olan yakınlığı offset komutu ve yazının eğim açısı rotate komutu ile ayarlanırken yazı içerisinde kullanılan sembollerin olması gerektiği gibi görünmesi de enhance komutu ile ayarlanır.

Örnekler

{lang="gnuplot"}

gnuplot-eksen1.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-eksen1.png'
set ylabel "Fonksiyon Değeri"
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-eksen2.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-eksen2.png'
set ylabel "Fonksiyon Değeri" tc lt 3
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-eksen3.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-eksen3.png'
set ylabel "Fonksiyon Değeri" font "arial,18"      
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-eksen4.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-eksen4.png'
set ylabel "Fonksiyon Değeri" tc rgb "green"      
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-eksen5.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-eksen5.png'
set ylabel "Fonksiyon Değeri" offset 2,0      
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-eksen6.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-eksen6.png'
set ylabel "Fonksiyon Değeri" rotate by 80      
plot x**2-20, tan(x)


{lang="gnuplot"}

gnuplot-eksen7.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-eksen7.png'
set termoption enhanced
set xlabel "Açı({/Symbol\260})"
set ylabel "Fonksiyon Değeri"       
plot x**2-20, tan(x)


Legend

Grafiğe legend eklemek için set key komutu kullanılarak yazılması istenen başlık adı çift tırnak (") içinde belirtilir. Yazının grafiğin içinde mi dışında mı olacağı, grafiğin hangi köşesinde olacağı, etrafında kutu olup olmayacağı, yazının hangi yöne yaslı olacağı, sembolün mü yoksa yazının mı önce yazılacağı gibi bir çok farklı seçenek bu komut ile ayarlanabilir.

Örnekler

{lang="gnuplot"}

gnuplot-legend1.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-legend1.png'
set termoption enhanced
set key tmargin right title 'Legend'  ##originally tmargin in right
plot x**2-20 title "x^2-20", tan(x) title "Tan(x)"


{lang="gnuplot"}

gnuplot-legend2.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-legend2.png'
set termoption enhanced
set key top center horizontal
plot x**2-20 title "x^2-20", tan(x) title "Tan(x)"


{lang="gnuplot"}

gnuplot-legend3.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-legend3.png'
set termoption enhanced
set key right title 'Legend'
plot x**2-20 title "x^2-20", tan(x) title "Tan(x)"


{lang="gnuplot"}

gnuplot-legend4.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-legend4.png'
set termoption enhanced
set key outside top right vertical title 'Legend'
plot x**2-20 title "x^2-20", tan(x) title "Tan(x)"


{lang="gnuplot"}

gnuplot-legend5.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-legend5.png'
set termoption enhanced
set key outside top right vertical reverse box title 'Legend'
plot x**2-20 title "x^2-20", tan(x) title "Tan(x)"


{lang="gnuplot"}

gnuplot-legend6.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-legend6.png'
set termoption enhanced
set key left Left reverse box title 'Legend'
plot x**2-20 title "x^2-20", tan(x) title "Tan(x)"


{lang="gnuplot"}

gnuplot-legend7.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot-legend7.png'
set termoption enhanced
set key left reverse box title 'Legend'
plot x**2-20 title "x^2-20", tan(x) title "Tan(x)"


Çizgi tipi

Grafikteki verileri belirten çizgi ve/veya noktaların şekilleri ve renklerini değiştirmek için lt (linetype) komutu kullanılır. Grafik çizdirilirken lt komutu kullanılmazsa şablonda belirtilen sıra ile ilerleyerek grafik oluşturulur. İlk çizilen grafik için lt 1 özellikleri, ikincisi için lt 2 özellikleri gibi. Bunun yanı sıra şablondan hazır almayıp istenilen tipte oluşturmak için de lc (linecolor), rgb ve lw (lineweight) komutları kullanılabilir.

set style line n komutuyla çizdirilecek olan grafikler numaralandırılır. plot komutundan sonra her bir çizgi için girilmiş olan numara ls n ile belirtilir. Belirlenmiş olan özelliklere göre çizdirilmek istenen grafik ls (linestyle) komutuyla hazırlanabilir.

{lang="gnuplot"}

gnuplot-cizgitipi.gpl

set terminal pngcairo dashed size 500,300
set output '../images/gnuplot-cizgitipi.png'
set key top left
set style line 1 lt 3 lw 4 lc rgb '#990042'
set style line 2 lt 7 lw 3 lc rgb '#31f120'
set style line 3 lt 2 lw 3 lc rgb '#0044a5'
set style line 4 lt 9 lw 4 lc rgb '#888888'
plot [0:1] x**0.5 ls 1, x ls 2, x**2 ls 3, x**3 ls 4

Nokta stili

Komutta girilen ps pointsize ın kısaltmasıdır. Burada işaret için boyutu ayarlamakta kullanılmıştır.pt nokta tipini (pointtype) temsil eder, istenilen işaret tipi bu komutla belirlenebilir. Çizgi bıyunca ne kadar aralıklarla işaret koyulacağını pi (pointinterval) komutu ile ayarlanır.Standart olarak bu uzaklık 1 olarak ayarlıdır.

{lang="gnuplot"}

gnuplot-nokta.gpl

set terminal postscript color solid
set output '../images/gnuplot-nokta.ps'
set key top left
set style function linespoints
set style line 1 lw 4 lc rgb '#990042' ps 2 pt 6 pi 5
set style line 2 lw 3 lc rgb '#31f120' ps 2 pt 12 pi 3
set style line 3 lw 3 lc rgb '#0044a5' ps 2 pt 9 pi 5
set style line 4 lw 4 lc rgb '#888888' ps 2 pt 7 pi 4
plot [0:1] x**0.5 ls 1, x ls 2, x**2 ls 3, x**3 ls 4

Opaklık ve saydamlık

Gnuplotun 4.4 versiyonuyla birlikte grafiklerde yapılan çizimlerde opaklık ayarlanabilir hale gelmiştir. İçi dolu alanlar çizilirken alanın opaklığını ya da saydamlığını ayarlamak grafiğin görsel olarak anlaşılmasında oldukça etkili bir rol oynar.

Öncelikle set term komutuyla terminali SVG terminaline dönüştürmek gereklidir. Ancak bu şekilde transparanlığı görüntülemek mümkün hale gelir. Bu nedenle çıktıda png değil svg formatında olmalıdır. Terminal ayarlandıktan sonra transparent komutuyla opaklık ayarlanabilir. Bu değer 0 ila 1 aralığındadır. 0 tamamen görünmez hali, 1 ise tam opaklığı temsil eder.

{lang="gnuplot"}

gnuplot-saydamlik.gpl

set terminal svg
set output '../images/gnuplot-saydamlik.svg'
set style fill transparent solid 0.3
plot [0:pi] sin(x)**2 with filledcurves above y1=0 lc rgb  '#00ffff',0.75*cos(2*x)**2 with filledcurves above y1=0 lc rgb '#aa00aa'

Patern ile çizdirilmiş grafiklerde de saydamlık uygulamak mümkündür. Örnekteki set style fill transparent solid 0.3 komutu yerine set style fill transparency pattern n komutu girilirse istenilen paternde saydamlığı ayarlamamk mümkün hale gelir.

Cookbook

Using two different y-axes

Bazı durumlarda çizdirilmek istenilen veriler aynı y ekseninde olmaz. tics komutuyla bu sorun halledilebilir. Gnuplot iki adet x-ekseni ve y-ekseni içeren çizimler yapabilir. İkinci bir y-ekseni eklenmek istendiğinde y2tics komutu girilmelidir. Komuttan sonra girilen ilk veri başlangıç noktasını, ikinci veri ise eksendeki aralık mesafesini ayarlamayı sağlar. set ytics nomirror komutu gnuplota sağ tarafta farklı bir eksen kullanmasını söyler. Son komut olan axis, çizdirilecek olan grafiklerin eksenlerini belirler.

{lang="gnuplot"}

gnuplot_cookbook_1.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_1.png'
set y2tics -100, 10
set ytics nomirror
plot sin(1/x) axis x1y1,100*cos(x) axis x1y2

Making a scatterplot

Her bir veri için nokta ya da küçük bir sembol içeren grafiklere scatterplot denir. Bir scatterplot çizebilmek için öncelikle dosyaya ihtiyaç duyulmaktadır. Örnekte 'scatter_plot.txt' adında içinde rastgele veri bulunan bir dosya oluşturulmuştur. Dosyada her x verisine karşılık bir y verisi bulunmaktadır. Grafiği çizdirmek için plot komutundan sonra hazırlanmış olan dosyanın ismi tırnak ('') içinde girilir. Eğer dosyada çok fazla veri varsa sembol olarak nokta (dots) kullanılarak daha küçük sembollerle veriler gösterilebilir.

{lang="gnuplot"}

gnuplot_cookbook_2.gpl

set terminal pngcairo size 600,300
set output '../images/gnuplot_cookbook_2.png'
plot 'scatter_plot.txt' with points pt 7

Plotting boxes

Gnuplot'un çizdiği kutu stili, bar grafiklerine benzerdir. Her bir veri eksen boyunca bir kutu şeklinde çizilerek gösterilir. İsteğe göre çizdirilen bu kutular paternlerle, renklerle, ya da boş olarak doldurulabilir. bu stil genelde histogram grafiklerinin bir çeşididir.

Aşağıda girilen ilk komut ile çizilen kutular patern ile doldurulur. Boş kutu oluşturmak için set style fill empty ya da kutuları renlendirmek için set style fill solid ya da doldurma stilini özelleştirmek için set style fill pattern n (n patern için seçilen herhangi bir tamsayı)komutları girilerek çizdirilen grafik öznelleştirilebilir.

{lang="gnuplot"}

gnuplot_cookbook_3.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_3.png'
set style fill pattern
plot [-6:6]  besj0(x) with boxes, sin(x) with boxes

Plotting circles

Verilerin daireler şeklinde gösterildiği grafikler çizilebilir. Bu grafik x eksenine göre çizilmiş bir noktanın iki değeri olduğunda elverişli olur. Örneğin; meteorolojik bir verinin grafiği çizilirken sıcaklığın zamana göre değişimi grafiğinde, dairelerin yarıçapı nem oranını gösterebilir.

Oluşturulmuş olan parabolacircles.txt 3 kolonlu dosyasındaki her bir nokta için 3. kolondaki veri çap kabul edilerek bir daire çizilir. Örnekteki veriler rastgele seçilmiştir.

{lang="gnuplot"}

gnuplot_cookbook_4.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_4.png'
set key off
plot "parabolacircles1.txt" with circles

Drawing filled curves

Çizilen verilerde ya da iki eğimdeki farklar ortaya çıkartılmak istendiğinde belirli bölgeler işaretlenebilir. filledcurves komutuyla istenilen kısmın içi doldurulabilir. Aşağıdaki örnekte renk belirtilmemiştir fakat istenilen renk lt rgb colour (colour herhangi bir renk olabilir) komutu girilerek seçilebilir. set style fill pattern n komutuylada doldurulan kısım için düz renk yerine istenilen bir patern seçilebilir.

{lang="gnuplot"}

gnuplot_cookbook_5.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_5.png'
plot [0:50] besy0(x) with filledcurves above y1=0.07

Making a basic histogram plot

Tekrarlı sayılardan oluşan verilerin, tablodan yararlanarak grafiğe aktarılması yani veri gruplarının grafiğinin dikdörtgen sütunlar halinde gösterildiği grafik türüne histogram denir.

Örnekteki parabola.txt adındaki dosya iki kolondan oluşan verileri içermektedir. x ve y noktalarından oluşan bir grafik çizmek yerine devam eden çizgilerden oluşan ve adımların yatay ve dikeyde takip edilebileceği grafik çizimi yapılabilir. Yatay çizgiler tam olarak x için verilen koordinatı göstermez bunun yerine önce ve sonra gelen x koordinatlarının ortalamasına göre yapılan çizimi gösterir. Bu bir histogram oluşturulurken kullanılan genel yöntemdir.

{lang="gnuplot"}

gnuplot_cookbook_6.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_6.png'
plot [-2:5] 'parabola.txt' with histeps

Stacking histograms

Histogram grafiklerinin bir diğer türüde ... .Bu grafik çizimiyle iki ayrı dağılımı kıyaslamak mümkün hale gelir. İkinci dağılım eksenlere göre ölçülerek yapılmaz, ama kutunun üst kısmı ilk dağılımı verir??

Örnekte ilk olarak girilen set komutuyla histogram barları istenilen renkle doldurulmuş ve etrafına siyah bir çerçeve çizdirilmiştir. Bu komut girilmezse kutuların içi boş kalacaktır. Sonraki iki satırda dosyadaki verilerle histogram grafiği çizilmesi için yazılmıştır. rowstacked komutuyla dosyadaki her bir satırın birlikte dikey bir kolon oluşturması sağlanır.?? Son satırda girilen komutlarla hesaplamalarda hangi kolonların kullanılacağı belirlenmiştir. Parantez içerisindeki değerler; dolar işareti ile kolon numarası belirlenmiştir. 3. kolondaki değerler 20 ile çarpılarak büyütülmüştür.

{lang="gnuplot"}

gnuplot_cookbook_7.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_7.png' 
set style fill solid 1.0 border lt -1
set style data histograms
set style histogram rowstacked
plot [0:40] 'parabolacircles1.txt' using ($2), '' using (20*$3) notitle

Plotting multiple histograms

Histogramları sıkıştırmak yerine sıra sıra görüntülemekte mümkündür. Bir önceki grafikteki veriler kullanılarak farklı tarzda histogram grafik çizilmiştir. Grafikte yer açmak için çizilen kutular otomatik olarak daha ince çizilir.

{lang="gnuplot"}

gnuplot_cookbook_8.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_8.png'
set style fill solid 1.0 border lt -1
set style data histograms
plot [0:40] 'parabolaCircles.text' using (-$2), '' using (20*$3) notitle

Dealing with errors

Grafikte verilerden kaynaklanan dağılımı ya da errorları göstermek mümkündür. Bu grafik yöntemlerinden bir taneside "error bar" stilidir.

Örnekte yine parabolaCircles.text dosyası kullanılmıştır. Dosyadaki 3. kolonda bulunan rastgele veriler grafikteki errorları gösterir. Gnuplotun standart olarak nokta büyüklüğü küçüktür, bu nedenle ilk olarak daha görünür olması adına değer büyütülmüştür. İkinci komutla küçük olan yatay barlar büyütülmüştür. Üçümcü komutla aralık, bir önceki örnekteki veriler ve error barın stili seçilir. '' bu işaret kullanılacak olan dosyanın öncesinde belirtilenle aynı dosya olduğu anlamına gelmektedir. pt point type yani punto tipini belirtir. Örnekte seçilen pt 7 yuvarlak bir işaret anlamına gelmektedir. Son olarak girilen notitle komutu ise grafikte ekstra bir girdi olmasını engeller.

{lang="gnuplot"}

gnuplot_cookbook_9.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_9.png'
set pointsize 3
set bars 3
plot [1:3] 'parabolaCircles.text' using 1:(-$2):3 with errorbars, '' using 1:(-$2):3  pt 7 notitle

Error barları diğer grafik stilleriyle birleştirilebilir. Örnekte error barları kutularla çizilmiş bir grafikle birleştirilmiştir. Kutular ince çizgiler oluşturulan patern seçilerek doldurulmuş ve siyah bir çerçeve ile belirginleştirilmiştir. Komut satırındaki errorbars komutu boxerrorbars olarak değiştirilerek yeni grafik çizilmiştir.

{lang="gnuplot"}

gnuplot_cookbook_10.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_10.png'
set style fill pattern 2 border lt -1
plot [1:3] 'parabolaCircles.text' using 1:(-$2):3 with boxerrorbars

Making a statistical whisker plot

Whisker grafiği girilen verilerin merkezi dağılımına göre yayılımını gösteren bir grafiktir. Her bir sembol bir dizi ölçümün ortalamasını gösterir. Whiskers hesaplanan limitlerde en küçük ve en büyük verileri gösterir. Sapan değerler grafiğin dışında gösterilir. Kutu içindeki çizgiye medyan denir. Eğer veriler medyan etrafına simetrik yayılmışlarsa; medyan kutuyu ortalamıştır. Verilerin dağılımndaki değişikliğe göre medyanın konumuda değişiklik gösterir.

Örnekte candlesticks.dat dosyası kullanılmıştır. Dosya 6 adet kolondan oluşmaktadır. Dosya formatı aşağıda gösterildiği gibi olmalıdır.

x whisker_min box_min mean box_high whisker_high

set komutu girilen ilk iki satırla x ve y eksenlerinin yayılımı ayarlanmıştır. Sonraki komut satırında boxwidth komutuyla dikdörtgenlerin genişliği belirlenmiştir. Örnekte seçilen genişlik oldukça dardır. Ardından plot komutuyla grafik çizdirilmiştir. Kullanılan dosyadaki verilerin kolonları doğru sıralamada olmadığı için using komutuyla kolonlar grafik için sıralanır. whiskerbars komutu whiskerların sonuna küçük capler koyar. plot komutunun ikinci kısmında yine aynı dosyanın 4. kolonu (ortalamalar) kullanılarak kutuların içindeki yatay çizgiler (medyan) çizdirilir.

{lang="gnuplot"}

gnuplot_cookbook_11.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_11.png'
set xrange [0:11]
set yrange [0:10]
set boxwidth 0.2
plot 'candlesticks.dat' using 1:3:2:6:5 with candlesticks lt -1 lw 2 whiskerbars, '' using 1:4:4:4:4 with candlesticks lt -1 lw 2 notitle

İsteğe bağlı olarak whisker grafiklerindeki kutuların içleri renkle ya da bir paternle doldurulabilir. Bunun için girilmesi gereken komut;

set style fill solid

ya da

set style fill pattern n

Making an impulse plot

Verilerin farklılıklarını gözlemlemek için kullanılan bir diğer grafik çeşidide impulse ya da stick grafikleridir. Eğer çizgilerin kalınlığı arttırlırsa impulse grafikleri kutu grafiklerine benzer olacaktır.

Örnekte girilen set komutuyla fonksiyonu çizdirmek için gerekli olan veri sayısı belirtilmiştir. plot komutuyla girilen with impulses opsiyonuyla gnuplota grafiği impulse stiliyle çizdirmek istenildiği söylenir.

{lang="gnuplot"}

gnuplot_cookbook_12.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_12.png'
set samples 30
plot [0:2*pi] sin(x) with impulses lw 2

Stem grafikleri elektrik mühendisliğinde kullanılan bir grafik türüdür. Impulse grafiklerine benzerdir fakat bu grafik biçiminde her bir çubuğun ucunda işaret bulunur. Bu şekilde çizdirilen grafik sayesinde verilerin dağılımını görmek, grafiği okuyabilmek daha kolay olur.

Örnekte veriler bir impulses opsiyonuyla bir de points opsiyonuyla çizdirilerek grafik oluşturulmuştur.

{lang="gnuplot"}

gnuplot_cookbook_13.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_13.png'
set samples 50
plot [0:4*pi] exp(-x/4.)*sin(x) with impulses lw 2 notitle, exp(-x/4.)*sin(x) with points pt 7

Graphing parametric curves

Gnuplot parameter komutuyla x ve y değerlerinin üçüncü bir değişkene göre değişimini gösteren grafikler çizebilir.

Örnekte kullanılacak olan örenk sayısı 1000 seçilmiştir. set parametric komutuyla gnuplotun plot komutunu yorumlama şekli değiştirilir. Son satırda girilen x ve y koordinatları artık t parametresine göre çizilir.

{lang="gnuplot"}

gnuplot_cookbook_14.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_14.png'
set samples 1000
set parametric
plot sin(7*t), cos(11*t) notitle

Plotting with polar coordinates

Kutupsal koordinatlarda bir yarıçap (r) ve bir açı (θ) bulunur. Gnuplot komut satırında açı koordinatları t ile belirtilir. Kutupsal koordinatlar kullanılarak spiraller, kapalı eğriler çizmek mümkündür.

Girilen ilk üç set komutuyla merkezde kesişen eksenler oluşturulur. unset border komutuyla çerçeveyi oluşturan çizgi silinir. Örnek sayısı 500 seçildikten sonra set polar komutu sayesinde (x-y) koordinatları (r-θ) koordinatlarına dönüştürülür.

{lang="gnuplot"}

gnuplot_cookbook_15.gpl

set terminal pngcairo size 400,400
set output '../images/gnuplot_cookbook_15.png'
set xtics axis nomirror
set ytics axis nomirror
set zeroaxis
unset border
set samples 500
set polar
plot [0:12*pi] t

Controlling your tics

Grafik çiziminde aralıklar belirtilirken bir major tikler bir de minör tikler kullanılır. Bunlar grafiğin anlaşılabilmesi, okunabilir olması için önemli araçlardır.

Örnekte mxtics komutuyla x eksenindeki ve mytics komutuyla y eksenindeki minör tiklerin hangi aralıklarla yerleştirileceği ayarlanmıştır.

{lang="gnuplot"}

gnuplot_cookbook_16.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_16.png'
set grid
set mxtics 4
set mytics 2
plot [0:2*pi] sin(12*x)*exp(-x/4)

Standart olarak gnuplotta tik boyutları küçük olarak ayarlıdır. Bu nedenle minör tikler eklendiğinde gözle net olarak farkedilemeyecek kadar küçük olabilir. Daha görünür hale getirmek için tiklerin boyutları ayarlabilir. set tics scale 3 komutuyla standart olan tik boyutu 3 katına büyütülmüştür.

{lang="gnuplot"}

gnuplot_cookbook_17.gpl

set terminal pngcairo size 400,300
set output '../images/gnuplot_cookbook_17.png'
set tics scale 3
set mxtics 4
set mytics 4
plot [0:4*pi] sin(x)/x

Minör tiklerin de boyutlarını ayarlamak mümkündür. Bunun için set tics scale a,b komut satırına girilebilir. Buradaki a major tiklerin boyutunu ayarlarken b yerine girilen sayı minör tiklerin boyutunu ayarlar. Grafikte tiklerin tamamen kaldırılması isteniyorsa unset tics komutu girilmelidir.

Gnuplot sayesinde tiklerin formatlarınıda değiştirmek mümkündür. set format y ve set format x komutları ile x ve y eksenlerindeki tikler nitelendirilebilir. Tüm format opsiyonlarını görüntülemek için gnuplot interaktif ekranında help set format komutu girilebilir.

Örnekte y eksenindeki tikler için P= %.2f Watts girilmiştir. Burada '%' karakteri genelde grafik üzerinde olması gereken sayıyı temsil eder. f floating point anlamına gelir. Bu da sayının ondalık kısmınında olduğunu temsil eder.

{lang="gnuplot"}

gnuplot_cookbook_18.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_18.png'
set ylabel "Output power"
set format y "P = %.2f Watts" 
set format x "%.3f%%"
set rmargin 6
plot [0:100] x**2

Arranging an array of plots

Gnuplotta belirli sayıdaki grafik tek bir yapıda birleştirilebilir. Bunun için multiplot özelliği aktif hale getirilmelidir. set multiplot komutuyla aktif hale getirilen bu mod, unset multiplot ile sonlandırılır. set multiplot layout 2,2 yazıldığında alan 2*2 bölmeye ayrılır. Her bir bölmeye bir grafik çizimi yapılabilir.

{lang="gnuplot"}

gnuplot_cookbook_19.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_19.png'
set multiplot layout 2, 2
plot besj0(x)
plot besj1(x)
plot besy0(x)
plot besy1(x)
unset multiplot

Creating an inset plot

Kullanılan bir diğer grafik modeli ise grafiğin içinde ayrı, daha küçük bir grafik bulunan grafiklerdir. Grafik içinde bulunan bu tarz grafiklere inset denir. Bu modelde grafik çizimi, çizdirilen grafiğin belirli kısmını daha büyük görüntülemek için kullanılabilir.

Bu tarzda bir grafik çizebilmek için öncelikle multiplot modu aktif hale getirilmelidir. set object ellipse komutuyla grafikte istenilen bölgeye bir elips şekli çizilir. set arrow komutuyla ise bu elipsten çizdirilecek olan küçük grafiğe doğru bir ok çizilir. inset grafiğin boyutu set size komutuyla daha küçük olarak ayarlanır. Ardından ikinci grafik (tam ekran) için komutlar girilirek multiplot modu kapatılır.

{lang="gnuplot"}

gnuplot_cookbook_20.gpl

set terminal pngcairo size 500,300
set output '../images/gnuplot_cookbook_20.png'
set multiplot
set object ellipse center .13, 0 size .4, 4
set arrow from .1, 2.1 to screen .22, .4 front lt 3
set samples 1000
set grid
set xtics .4
set ytics 4
plot [0:2*pi] exp(x)*sin(1/x)
set origin .2, .4
set size .25,.25
clear
unset key
unset grid
unset object
unset arrow
set xtics .1
set ytics .5
set bmargin 1
set tmargin 1
set lmargin 3
set rmargin 1
plot [0:.2] exp(x)*sin(1/x)
unset multiplot

Veritabanından gnuplot ile çizim

{lang="gnuplot"}

gnuplot-sql.txt

set terminal png size 500,500
set output "mysql_test.png"

plot '< mysql verianalizi_gen -r -s -e''select * from gene_coordinates limit 100'' ' using 1:5