Sunday, April 5, 2015

Графо-Дүрслэл ба Нюфлот /visualization with Gnuplot/

Графо-дүрслэлийг Нюфлотоор (gnuplot - 1)

Өнгө гэж бидний нэрлэсэн өөр өөр долгион бүхий гэрлийн спектрүүд юм. Нохой орчин тойрноо сааралдуу өнгөөр хардаг бол бух бүх зүйлсийг хар цагаанаар л хардаг. Гэхдээ бид тийм ч сайн харааны мэдрэмжтэй амьтад биш юм. Гэрлийн долгион бага бол бид мэдэрч чадахгүй түүнийгээ харанхуй гэж нэрлэнэ. Биднээс илүү гэрлийн мэдрэжтэй амьтад зөгийнөөс авхуулаад бас байх юм. Гэвч бид өнгөнөөс бусдийг харж чаддаг гайхалтай мэлмийтэй амьтад юм. Бид хэт ягаан туяа, хэт улаан туяа гэх мэтийг харж чаддагүй мөртлөө мэддэг. Өнгөтэй ялгаагүй дуу авиаг бас хэлж болно. Энэхүү гайхамшигт мэлмийг бидэнд ШУ өгчээ. Бид ШУ-ны тусламжтайгаар харж чадахгүй зүйлсээ харж, сонсож чадахгүй зүйлсээ сонсож, зарим зүйлийг мэдэрч байна. ШУ-ныг нэг шашин гэж үзээд тэр баримтлалаар хэлбэл ШУ-нчид болон судлаачид маань мэлмий нь нээгдсэн лам нар юм шүү дээ. Тооцон бодох шинжлэх ухаанд хүмүүний мэлмий үр дүнг хэрхэн харахаас эхэлдэг. Үүнийг графо-дүрслэл гэж нэрлэнэ. Энэ бидэнд бүх юмсын физик шинж чанарыг харах боломжийг олгодогч харж амжихгүй байгаа зүйлүүд бас цөөнгүй. Мэлмий доорхи зургууд шиг сайжрах байхаа. Эхний зургууд бол /цифрээр дүрслэсэн/ 1980 оны үе дахь графо-дүрслэл, дараагийн өнгөт зургууд бол 1990 оноос хойших графо-дүрслэл. 

1980 - аад оноос өмнөх үеийн тооцон бодох шингэний динамик дахь графо-дүрслэл

Орчин үеийн өндөр нягтрал бүхий графо-дүрслэлийн үр дүн /цоргилын динамик/

Дундаж үеийн графо-дүрслэлийн үр дүн /Голын адаг орчмийн далай давстай усны түрлэг. Үүнийг давстай усны шаантаг гэж нэрлэдэг/

Графо-дүрслэлийн олон програм байх ба 30 гаруй жил шинэчлэгдэн боловсруулагдаж байгаа хамгийн энгийн командын мөр бүхий програм бол Нюфлот /gnuplot/ юм. Энэ програм нь үнэгүй эх үүсвэр бөгөөд альч үйлдлийн систем дээр сууж ажиллаж чадна. Програмыг татах бол энд дарж нэвтрэн sourceforge - оос дамжуулан татаж авна уу.

Gnuplot буюу нюплотын тухай

Олон муруй нэг талбарт байгуулах

Олон муруй графикийг нэг талбарт байгуулах нь нюплотын хувьд хялбар зүйл юм. Ингэж байгуулахын тулд байгуулах гэж буй функц эсвэл мэдээний файлын хооронд таслал (comma) тавихад л хангалттай юм. Нэмэлт комманд бичээгүй тохиолдолд програм автоматаар муруй бүрийн шугамны төрөл, өнгө, өргөнийг тохиуулан гаргана.



Figure 1. Нэг талбарт гурван муруйн график байгуулах жишээний үр дүн
Үүнийг хийхдээ эхлээд функаа бодуулж файл дээр үр дүнг хадгалж дараа нь дуудаж байгуулах нь үр дүнтэй байдаг. Функцыг шууд нюплотын хянах самбар (console) дээр plot коммандын хамт бичиж болох ч дараа хэрэг болох функцын мэдээллийг бол файл дээр хадгалах нь ашигтэй юм. Хянах самбар дээр set table ‘parabola.text’ гэж бичээд enter дарж plot –x**2 гэж бичье. Энд set table гэдэг нь parabola.text  файлыг үүсгэж –x**2 функцын үр дүнг хуулах комманд бөгөөд нээсэн файлыг хаахын тулд заавал доод мөрөнд unset table гэж бичих ёстой. Үүссэн parabola.text файл нь нюфлотын байрлаж байгаа хавтас дотор үүснэ. Хавтасны байрлалыг болон дээрх коммандуудыг бичсэн хянах самбарыг харуулъя.



Figure 2. Нюфлотын хянах самбар болон ажиллаж буй хавтасны байрлалыг харах өөрчлөх цонх
Дээрх зургийн коммандын мөрний хамгийн доор байх plot [-1:1] 'parabola.text', -x, -x**3 гэх комманд нь parabola.text , -x, -x**3  гэсэн гурван муруйг нэг талбарт байгуулах комманд бөгөөд эхний [-1:1] нь х тэнхлэгийн хүрээг зааж өгнө. Коммандаа бичээд enter дарахад зураг 1 – т харуулсан график бэлээхнээ гарч ирэх болно. Гурван муруйн шугамны өнгө, өргөнийг тус бүрийнх нь ард коммандаар өөрчлөн зурж болно. Эхэнд үүссэн -x**2 – ийн бодолт болох  parabola.text өгөгдлийн файлыг (datafile) авч үзье. Файл дотор эхний мөр хоосон байх ба дараа нь # тэмдэгээр эхэлсэн тайлбарын мөрний араас x ба y функцын бодолтын утгын цуваа харагдана. Харин цуваа бүрийн хойно үсгэн тэмдэглэгээ байх ба энэ нь “i” байвал бодолтын цэг нь ивэхитэй хүрээнд, “о” бол хүрээнээс гадна, “u” байвал тодорхойлогдоогүй утга байна. Файлын доторхын эхний хэсгийг харвал

# Curve 0 of 1, 100 points
# Curve title: "-x**2"
# x y type
-10 -100  i
-9.79798 -96.0004  i
-9.59596 -92.0824  i
-9.39394 -88.2461  i
-9.19192 -84.4914  i
-8.9899 -80.8183  i
-8.78788 -77.2268  i
-8.58586 -73.717  i
-8.38384 -70.2887  i
-8.18182 -66.9421  i

Хоёр өөр босоо тэнхлэг ашиглах

Заримдаа муруйнууд ижил “х” тэнхлэгийн утгыг агуулавч өөр өөр “у” тэнхлэгийн утгатай байхыг шаарддаг. Нюфлот үүнийг өөрийн tics коммандын тусламжтайгаар гүйцэтгэж чадна. Дараах зурагт хоёр өөр утгын хүрээ бүхий у тэнхлэгийг агуулсан график харагддаж байна. Хэрэв нэг у тэнхлэгт хоёр муруйг харъяа гэвэл аль нэг муруй нь маш нарийвчлалгүй харагдах болно.  Харин тохиромжит хоёр тэнхлэг ашигласан үед график дараах байдлаар харагдана.



Figure 3. 2 ширхэг босоо тэнхлэгтэй график босгох
Дээрхийг хийхдээ дараах командыг командын мөрөнд жагсааж бичнэ.
gnuplot> set y2tics -100, 10
gnuplot> set ytics nomirror
gnuplot> plot sin(1/x) axis x1y1, 100*cos(x) axis x1y2
Дээрх командын gnuplot> гэдэгийг бичих шаардлагагүй юм. set y2tics -100, 10 гэдэг нь хоёр дахь босоо тэнхлэгийг заах ба утгын хүрээг нь -100 – аас 10 – ын интервалтай байхаар өгчээ. Харин эхний босоо тэнхлэгийг ажил утгын хүрээтэй өгөхгүйн тулд nomirror гэж бичиж. Ингээд эхний босоо тэнхлэг болон хэвтээ тэнхлэгт (axis x1y1) харгалзуулан sin(1/x) – ийн муруйг, хоёр дахь босоо тэнхлэг хэвтээ тэнхлэгт (axis x1y2) харгалзуулан cos(x) – ийн муруйг байгуулах команд өгчээ. Нюфлотод зарим командын үгнүүдийг эхний үсгээр товчлон бичих тохиолдол байна. Тухайлбал plot гэдгийг  p, using гэдгийг u, with гэхийг w гэх мэт. Бидний авч үзэж буй sin(1/x) функц бол x=0 цэгийн орчимд хязгааргүй утгыг үзүүлэх ба энэ мэт функцын утга хязгааргүй болох үеийн аргументийн утгыг “онцгой (singularity-ганцрал)” гэж нэрлэдэг. Гэвч нюфлот онцгой цэгийн ойролцоо утгатай мэт харуулсан байна. Энэ бол цэгүүдийн хооронд шулуун шугамаар холбож зурж байгаагийн илрэл юм. Босоо тэнхлэгийг хоёр өөр авч болдог шиг хэвтээ тэнхлэгийг мөн хоёр авч болно. Хэвтээ ба босоо өөр өөр тэнхлэгүүлийг ашигладаг графикийн нэг тод жишээ нь усан сангийн эзлэхүүний ба топогрфикийн характеристикууд юм. Хоёр хэвтээ тэнхлэгийг авч үзэхэд босоо тэнхлэгийг тохируулахаас хүндрэлтэй байдаг. Дараах командын мөрүүд нь хоёр өөр хэвтээ тэнхлэгийг байгуулж буй бичлэг (script) юм.
gnuplot> set x2tics -20 2
gnuplot> set xtics nomirror
gnuplot> set xrange [-10:10]
gnuplot> set x2range [-20:0]
gnuplot> p sin(1/x) axis x1y1, 100*cos(x-1) axis x2y2



Figure 4. Хос хэвтээ ба босоо тэнхлэгтэй график
Нэг зүйлийг анхаарсан бол өмнөх бичигдсан бүх команд дараачийн зурах командад хүчинтэй үйлчилэх явдал юм. Өмнөх коммандын босоо хоёр тэнхлэгийг сүүлчийн командын мөрөнд оруулаагүй боловч автоматаар зурагдсан байгаа нь үүнийг батлана. Тиймээс шал өөр төрлийн график зурахаар бол reset гэсэн командыг ашиглаж байгаад командаа бичнэ. Мөн түүнчлэн аль шугам нь аль муруйг харуулж байгааг тэмдэглэсэн тэмдэглэгээ байх боловч аль тэнхлэг аль муруйнд хамаарахыг тэмдэглэх тусгай зүйл гэж үгүй болно.

Цэгэн график үүсгэх

Туршилт хэмжилтийн мэдээллээр график байгуулахад шулуунаар байгуулна гэвэл орооцолдсон төмөр утас шиг л график гарах байх. Иймд олон удаагийн хэмжилтийн мэдээллийг цэгэн графикаар харж хандалтын муруйг нь үүсгэх эсвэл тохирох регрессийн муруйг нь байгуулах нь зохистой юм. Цэгэн график нь мэдээллийг цэг (dots) болон тохирох тэмдэглэгээгээр (symbol) харуулна.



Figure 5. Цэгэн график үүсгэх
Цэгэн графикийг үүсгэхийн тулд хэмжилтийн мэдээлэл нь хоорондоо нэг зайтай хэвтээ ба босоо тэнхлэгт харъяалагдахаар файл (Жишээнд файлын нэр нь “scatter.dat” юм) хэлбэрээр зохион байгуулагдсан байх ёстой.
X1 Y1
X2 Y2
………
XN YN
Хэрэв таньд надтай адил график үүсгэчихээр хэмжилтийн мэдээлэл бүхий файл байхгүй бол үүсгээд байгуулж болно. Мэдээлэл бүхий файл бэлэн болсон бол дараах коммандаар график зурах болно.
p 'scatter.dat' w points pt 7
Үүнд p нь plot гэдэг үгний товчлол ба w нь with гэдгийг илтгэж цэгээр график үүсгэнэ гэдгийг зааж өгнө. pt гэдэг нь pointtype гэдэг зааврын товчлол ба цэгийн төрлийг тогтоож өгнө. 7 гэсэн тоон дээр битүү цэг оногддог юм. Тэгэхээр цэгийн төрөл 1 – эхлэн янз бүр байх нь байна. Та бүхэн тоог нь сольж юу болохыг харж болно.

Дөрвөлжин дүрстэй график байгуулах

Дөрвөлжин график нь бар графиктай адилхан ба бүх утгууд дөрвөлжин дүрсээр хэвтээ тэнхлэгээр уг утга хүртэл сунаж байрласан байна. Дөрвөлжин дүрсний хэмжээ болон хүрээний өнгө, зураасны өргөн, дотор өнгө гэх мэтийг өөрсдийн хүссэнээр өөрчлөх боломжтой. Энэ төрлийн график нь хистограм (зурвасан график), хур тунадасны хуваарилалт гэх мэтийг байгуулахад хэрэглэгдэнэ.



Figure 6. Дөрвөлжин график. Үүнийг мөн зурвасан график гэж нэрлэж болох юм.
Дээрхийг байгуулахдаа дараах командын шугамуудыг бичнэ.
gnuplot> reset
gnuplot> set style fill pattern
gnuplot> plot [-6:6] besj0(x) w boxes, sin(x) w boxes
Энд эхний команд reset нь өмнөх өгөгдсөн командуудыг үгүй хийж шинээр эхлүүлэхийг хэлж өгнө. Харин дараагийн set style fill pattern нь өөр өөр хээгээр дүүргэгдсэн дөрвөлжингөөр график зурахыг заана. Гурав дахь мөр нь Бесселийн функц, синусын функцыг -6 – аас 6 – ийн хүрээнд дөрвөлжин дүрсээр зурахыг зааж өгнө. Мөн дөрвөлжин дотор ямар нэгэн хээ өнгө хэрэглэхгүй бол set style fill empty гэж болох ба эсрэгээр өнгөөр дүүргэхээр бол set style fill solid гэж болно. Мөн хээний дугаарыг set style fill pattern n гэж зааж өгч болно.

Дугуй дүрсээр график зурах

Зарим үед тоон утгын нөлөөлөх хүрээг графикт дүрслэн харуулах шаардлага гардаг. Ийм тохиолдолд дугуй дүрсээр график зурж болох ба өмнөх  parabola.text файлын гурав дахь багананд байх i – ын оронд хэсэг хэсэг газар 1 – ээс 7 хүртэлх цифрийг бичиж график байгуулъя.



Figure 7. Дугуй дүрсээр график байгуулах
Жишээ болгон мэдээний файлыг харуулбал:
# Curve 0 of 1, 100 points
# Curve title: "-x**2"
# x y type
-10 -100  1
-9.79798 -96.0004  3
-9.59596 -92.0824  2
-9.39394 -88.2461  6
-9.19192 -84.4914  5 г.мэт
Харин график босгох команд нь:
gnuplot> plot 'parabola.text' w circles

Будмал график үүсгэх

Зарим тохиолдолд хоёр өөр муруй эсвэл мэдээллийн ялгааг харуулах, эсвэл ямар нэгэн стандарт утгаас илүү гарсан утгуудыг ялган харуулах тохиолдолд муруйг будаж харуулах нь тохиромжтой арга юм. Жишээлбэл голын усны бохирдол хүлцэх хэмжээнээс илүү гарсан тохиолдолд илүү гарсаныг будаж ялган харуулбал график илүү ойлгомжтой болох болно. Үүнийг хийхдээ:
gnuplot> plot [0:50] besy0(x) with filledcurves above y1=0.07



Figure 8. Будмал хэсэгтэй график байгуулах
Дээрх командад filledcurves above y1=0.07 гэдэг нь босоо тэнхлэгийн 0.07 – оос дээш гарсан Бесселийн функцын муруйг дүүргэж будах юм. Бид үүний араас lt rgb blue гэх мэтээр нэмэлт команд бичиж будагний өнгө, тунгалагшилт гэх мэтийг тохируулж болно.
Зөвхөн утгын хүрээгээр будахаас гадна хоёр мэдээллийн огтлолцолыг харуулж болно. Энэ тохиолдолд мэдээний файл хэрэг болно. Мэдээний файл нь дараах байдлаар зохион байгуулагдсан байх ёстой.
X1 Y1 Z1
X2 Y2 Z2
X3 Y3 Z3
……………
XN YN ZN
Хэрэв ашиглах мэдээ байхгүй бол фортран дээр жижигхэн програм бичиж энэхүү бүтэцтэй мэдээний файлыг үүсгэе.
      program funct
       real x, y
       open(1,file='intersection.dat')
       do x=-1, 2, 0.1
       y1 = x**2
       y2= x
       write(1,*) x, y1, y2
       enddo
      end program
Ингээд кодоо нэгтгэж (compile) бодуулсаны (run) дараа график байгуулах дараах кодийг бичье.
gnuplot> plot 'intersection.dat' using 1:2:3 w filledcurves



Figure 9. Бүтээсэн файлын дагуу байгуулсан график
Дээрх командад 1:2:3 гэдэг нь 1 ба 2 – р баганаар, мөн 1 ба 3-р баганаар график байгуул гэсэн үг юм.
Харин огтлолцлыг нарийн харах, өнгөөр бус штрихээр будахын тулд дараах командыг ашиглана.
gnuplot> plot [0:1] [0:1] 'intersection.dat' using 1:2:3 with filledcurves,\        
>'' using 1:2 lw 2 notitle, '' using 1:3 lw 2 notitle



Figure 10. Муруйнуудын огтлолцлыг харах
Дээрх шиг графикийг мөн нюфлотын өөрийнх нь командыг ашиглан зурж болно.
gnuplot> plot [0:1] '+' using 1:($1):($1**2) with filledcurves,\
>x lw 3 notitle, x**2 lw 3 notitle
Энд '+' тэмдэг нь энхний баганийн утгыг автоматаар бодуулах команд бөгөөд 1:($1):($1**2) нь гурван баганийг заах бөгөөд $1 – ийн оронд х, $1**2 – ийн оронд х**2 – ийн туга бодогдох болно. Харин өмнөх коммандад зүүлт бүхий  ' ' гэсэн хоосон мөрийг хэрэглэсэн ба энэ нь коммандын мөрний турш файлын нэрийг дахин давтах үед хэрэглэгдэх ба үүнийг нюфлотод онцгой файл (special file) гэж нэрлэдэг. \ тэмдэг нь мөр үргэлжилж байгааг илтгэнэ.

Санхүүгийн холбогдолтой график үүсгэх

Хэдий нюфлот нь шинжлэх ухаан, инженерчлэлийн салбарт зориулагдсан ч зарим талд санхүүгийн хэрэглээнд ашиглагдах нь олонтаа. Бид finance.dat гэсэн мэдээний файлыг ашиглан график байгуулъя. Мэдээний бүтэц нь:
Date                   open        low       high      close
2/27/2003            77.9        78.59     76.75     77.28
2/28/2003            78.15     78.47     77           77.95
График байгуулах команд нь:
gnuplot> plot 'finance1.dat' using 0:2:3:4:5 notitle with financebars    
gnuplot> plot [0:100] 'finance1.dat' using 0:2:3:4:5 notitle with financebars
Эхний мөрөөр график байгуулахад байгаа мэдээлэл бүрэн хэмжээгээрээ агуулагдсан график гарч ирнэ. Харин хэвтээ тэнхлэгт [0:100] гэсэн хязгаар өгсөнөөр энэ хэсгийн мэдээллийг харуулах болно.



Figure 11. Санхүүгийн холбогдолтой график
График нь ханшийн зах зээл дээрх нээсэн, хамгийн бага, хамгийн их, хаасан үнэ зэргийг харуулах ба эхний мөр нь графикийн төрлийг сонгож өгнө.
Шаталсан график үүсгэх
Шаталсан график нь хистограм бүхий графикийн нэгэн төрөл юм. Хугацааны алхам бүхий мэдээллийг шаталсан графикаар дүрслэн харуулах нь ойлгомжтой бөгөөд утга төгөлдөр байдаг. Жишээ болгон өмнөх parabola.text файлыг ашиглан шаталсан график байгуулан үзүүлье.
gnuplot> plot [-2:2] 'parabola.text' with histeps



Figure 12. Шаталсан график
Дараагийн удаа контур, вектор гэх мэт график байгуулахыг үзүүлнэ. 

No comments:

Post a Comment