Gnuplot
gnuplot – program do tworzenia wykresów w 2 i 3 wymiarach.
Spis treści |
[edytuj] Kolor
[edytuj] Gradient koloru
Sprawdzamy jaki mamy standardowy gradient kolorów ( tradycyjny pm3d (czarny-niebieski-czerwony-żółty ):
show palette
Otrzymujemy :
palette is COLOR rgb color mapping by rgbformulae are 7,5,15 figure is POSITIVE all color formulae ARE NOT written into output postscript file allocating ALL remaining color positions for discrete palette terminals Color-Model: RGB gamma is 1.5
Sprawdzamy jaki gradient ma aktualna paleta :
show palette gradient
Otrzymujemy :
0. gray=0.0000, (r,g,b)=(0.0000,0.3922,0.0000), #006400 = 0 100 0 1. gray=0.2500, (r,g,b)=(0.0000,1.0000,0.0000), #00ff00 = 0 255 0 2. gray=0.2500, (r,g,b)=(1.0000,1.0000,0.0000), #ffff00 = 255 255 0 3. gray=1.0000, (r,g,b)=(1.0000,0.0000,0.0000), #ff0000 = 255 0 0
Wykres składowych koloru otrzymamy:
test palette
Możemy to zapisać do pliku gif:
set terminal gif set output 'p.gif' test palette
Zobaczmy dokładniej jak zbudowany jest gradient.
[edytuj] rgbformulae
Jednym ze składników są funkcje odpowiadające za obliczenie każdej ze składowej koloru. ( mimo że nazwy składowych są R,G oraz B to ich znaczenie jest zależne od modelu koloru, tzn. w modelu HSV R będzie oznaczało H ). Mamy do dyspozycji 37 wbudowanych funkcji ponumerowanych od 0 do 36 ( liczby ujemne dają odwrócony gradient ). Możemy je wyświetlić:
show palette rgbformulae
Otrzymamy:
* there are 37 available rgb color mapping formulae: 0: 0 1: 0.5 2: 1 3: x 4: x^2 5: x^3 6: x^4 7: sqrt(x) 8: sqrt(sqrt(x)) 9: sin(90x) 10: cos(90x) 11: |x-0.5| 12: (2x-1)^2 13: sin(180x) 14: |cos(180x)| 15: sin(360x) 16: cos(360x) 17: |sin(360x)| 18: |cos(360x)| 19: |sin(720x)| 20: |cos(720x)| 21: 3x 22: 3x-1 23: 3x-2 24: |3x-1| 25: |3x-2| 26: (3x-1)/2 27: (3x-2)/2 28: |(3x-1)/2| 29: |(3x-2)/2| 30: x/0.32-0.78125 31: 2*x-0.84 32: 4x;1;-2x+1.84;x/0.08-11.5 33: |2*x - 0.5| 34: 2*x 35: 2*x - 0.5 36: 2*x - 1 * negative numbers mean inverted=negative colour component * thus the ranges in `set pm3d rgbformulae' are -36..36
Standardowo są wybrane funkcje nr 7 dla składowej czerwonej, 5 dla składowej zielonej i 15 dla niebieskiej. Możemy wybrać inny zestaw, na przykład proponowany w dokumentacji zestaw "gorący" :
set palette rgbformulae 21,22,23
albo odwrócony gradient:
set palette rgbformulae -21,-22,-23
[edytuj] Definiowanie własnej palety kolorów
set palette defined (0 "dark-green", 1 "green", 1 "yellow", 4 "red") test palette
Otrzymujemy nieciągły gradient.
[edytuj] Rysowanie danych z pliku
[edytuj] Przygotowanie pliku z danymi
Gnuplot może być używany jako uniwersalny program do rysowania przez inne specjalistyczne programy.
[edytuj] Przygotowanie pliku z danymi w C
Ten program tworzy w swoim katalogu roboczym plik tekstowy data.txt zawierający dane w formacie , który akceptuje gnuplot. Zawiera nagłówek poprzedzony znakiem "#", który przy rysowaniu jest ignorowany, oraz 2 kolumny liczb rozdzielone spacjami.
#include <stdio.h> #include <stdlib.h> int main(void) { int i; double x,y; char *output_filename="data.txt"; FILE *output_file; output_file = fopen(output_filename, "w"); if (output_file == NULL) { fprintf(stderr, "Nie moge otworzyc %s\n", output_filename); getchar(); return 1; } else { /* nagłówek */ fprintf(output_file,"%s %s %s \n","#","x","y"); y = 0.005; x = 0.0; /* 2 kolumny liczb rozdzielone spacjami */ fprintf(output_file,"% 6.2f % 6.2f \n",x,y); for(i=0;i<5;++i) { x += y; /* 2 kolumny liczb rozdzielone spacjami */ fprintf(output_file,"% 6.2f % 6.2f \n",x,y); }; /* for(i */ }; /* if ((output_file ... else */ fclose(output_file); fprintf(stderr,"file saved"); getchar(); return 0; }
Zawartość pliku wygląda następująco:
# x y 0.00 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.02 0.01 0.03 0.01
[edytuj] Przygotowanie pliku z danymi w MPSolve
W linii komend ( bez uruchomiania gnuplota) wprowadzmy polecenie z opcją -Og :
./unisolve -Og Data/umand31.pol >Results/data.txt
[edytuj] Rysowanie danych z pliku
Uruchom gnuplot:
gnuplot
i w linii komend wprowadź polecenie:
plot "data.txt"
W cudzysłowie jest nazwa pliku, może być poprzedzona ścieżką.