Gnuplot a tvorba přehledu charakteristických vibrací molekul

Gnuplot je poměrně jednoduchý, ale schopný nástroj na tvorbu grafů, úpravu spekter, apod. Lze ho využít i k jiným účelům. Do výukových materiálů jsem potřeboval vytvořit přehled poloh charakteristických vibrací skupin v IR a RA spektroskopii, což lze snadno udělat v běžném kreslícím programu, ale pro negrafiky je pak poměrně náročná úprava hotového obrázku. Proto jsem se rozhodl pro vytvoření skriptu, který snadno umožní vkládání nových řádků, případně jejich přemisťování.

Možností, jak požadovaný obrázek vytvořit je několik, já jsem použil šipky (arrows), které umožní snadnou změnu vzhledu. Prvním krokem je definice vzhledu šipek, nadefinoval jsem dva styly:

set style arrow 1 lc rgb '#ff0000' lw 5 heads filled
set style arrow 2 lc rgb '#0000ff' lw 5 heads filled

Styl 1 je pro modré šipky, styl 2 pro červené. Obě šipky mají tloušťku čar 5 a zakončení na obou stranách tvořené čarami, které svírají úhel 90° a mají délku 0,001.

Dalším krokem je definice os a rozsahů.

set xtics 600,200,3800 mirror
set x2tics 600,200,3800 mirror
set ytics ("C-F" 1,"C-Cl" 2, "S=0" 3, "Thioly" 4, "CN" 5, "NO_2" 6, \
          "C=O" 7, "Aminy" 8, "Ethery" 9, "Alkoholy" 10, "Aromatika" 11, \
          "C≡C, C≡H" 12, "=CH, C=C" 13, "(CH_2)" 14, \
          "CMe_2" 15, "CH" 16, "CH_2" 17, "CH_3" 18)

set xrange [3800:600]
set yrange [0.5:19]

První dva řádky definují osy x, pro přehlednost použijeme spodní (x) i horní (x2). Kótování bude po 200 v rozsahu 600 až 3800.  Poslední dva řádky definují rozsah os x a y. Třetí řádek definuje popisky na ose y, ty obsahují jednotlivé typy vazeb.

Poslední, co potřebujeme pro nastavení vzhledu obrázku je definice mřížky.

set style line 2 lc rgb '#bbbbbb' lt 1 lw 1
set grid back ls 2

Nadefinujeme si čáru o tloušťce 1 a šedé barvě, tu pak použijeme pro vykreslení mřížky.

Vzhled máme hotový, teď už můžeme začít do obrázku vkládat jednotlivé rozsahy vlnočtů vibrací. Aby byla pozdější úprava jednodušší, nebudeme pozici na ose y zadávat číselně, ale jako proměnnou, kterou postupně inkrementujeme.

i=1
set arrow from 1400,i to 1030,i arrowstyle i%2+1

i=i+1
set arrow from 900,i to 600,i arrowstyle i%2+1

Na prvním řádku je definice proměnné i, která obsahuje pozici y. Pozice šipky je určena dvojicí souřadnic (from x,y to x,y). Výraz za arrowstyle určuje styl (barvu) šipky. Operátor % je tzv. modulo, vrací zbytek po dělení. Takže pokud bude i sudé, použije se styl 1, pro liché styl 2.

Tím máme hotovo, na úplný konec je potřeba jen zvolit do jakého formátu a velikosti chceme obrázek uložit a obrázek vytvořit.

set term pngcairo size 1500,1000 crop
set output "prehled.png"

plot 0 notitle with lines lt 0

Náš obrázek bude vypadat nějak takto:

Kompletní kód

set style arrow 1 lc rgb '#ff0000' lw 2 heads filled
set style arrow 2 lc rgb '#0000ff' lw 2 heads filled

set xtics 0,200,3800 mirror
set x2tics 0,200,3800 mirror
set ytics ("C-F" 1,"C-Cl" 2, "S=0" 3, "Thioly" 4, "CN" 5, "NO_2" 6, \
          "C=O" 7, "Aminy" 8, "Ethery" 9, "Alkoholy" 10, "Aromatika" 11, \
          "C≡C, C≡H" 12, "=CH, C=C" 13, "(CH_2)" 14, \
          "CMe_2" 15, "CH" 16, "CH_2" 17, "CH_3" 18)


set xrange [3800:600]
set yrange [0.5:19]

i=1

set arrow from 1400,i to 1030,i arrowstyle i%2+1

i=i+1
set arrow from 900,i to 600,i arrowstyle i%2+1

i=i+1
set arrow from 1000,i to 800,i arrowstyle i%2+1
set arrow from 1180,i to 1100,i arrowstyle i%2+1

i=i+1
set arrow from 700,i to 640,i arrowstyle i%2+1
set arrow from 2600,i to 2510,i arrowstyle i%2+1

i=i+1
set arrow from 2350,i to 2150,i arrowstyle i%2+1

i=i+1
set arrow from 1350,i to 1300,i arrowstyle i%2+1
set arrow from 1580,i to 1420,i arrowstyle i%2+1

i=i+1
set arrow from 1900,i to 1650,i arrowstyle i%2+1

i=i+1
set arrow from 1700,i to 1600,i arrowstyle i%2+1
set arrow from 3500,i to 3200,i arrowstyle i%2+1

#Ethery
i=i+1
set arrow from 1300,i to 1000,i arrowstyle i%2+1

i=i+1
set arrow from 1300,i to 1020,i arrowstyle i%2+1
set arrow from 3300,i to 3750,i arrowstyle i%2+1

#Aromaty
i=i+1
set arrow from 900,i to 600,i arrowstyle i%2+1
set arrow from 1300,i to 1010,i arrowstyle i%2+1
set arrow from 1550,i to 1500,i arrowstyle i%2+1
set arrow from 1600,i to 1550,i arrowstyle i%2+1
set arrow from 2000,i to 1700,i arrowstyle i%2+1
set arrow from 3200,i to 3000,i arrowstyle i%2+1

i=i+1
set arrow from 600,i to 820,i arrowstyle i%2+1
set arrow from 2400,i to 2100,i arrowstyle i%2+1
set arrow from 3400,i to 3200,i arrowstyle i%2+1

i=i+1
set arrow from 600,i to 950,i arrowstyle i%2+1
set arrow from 1650,i to 1750,i arrowstyle i%2+1
set arrow from 3100,i to 3050,i arrowstyle i%2+1

i=i+1
set arrow from 700,i to 750,i arrowstyle i%2+1

i=i+1
set arrow from 1300,i to 1380,i arrowstyle i%2+1

i=i+1
set arrow from 2850,i to 2750,i arrowstyle i%2+1

i=i+1
set arrow from 1550,i to 1480,i arrowstyle i%2+1
set arrow from 2950,i to 2500,i arrowstyle i%2+1

i=i+1
set arrow from 1380,i to 1310,i arrowstyle i%2+1
set arrow from 1500,i to 1450,i arrowstyle i%2+1
set arrow from 3000,i to 2600,i arrowstyle i%2+1

########################################################

set style line 2 lc rgb '#bbbbbb' lt 1 lw 1
set grid back ls 2

set term pngcairo size 1500,1000 crop
set output "IR-vlnocty.png"

plot 0 notitle with lines lt 0

Leave a Reply

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..