Gnuplot

Z Wikibooks, biblioteki wolnych podręczników.
Skocz do: nawigacja, szukaj

gnuplot – program do tworzenia wykresów w 2 i 3 wymiarach.

Terminal[edytuj]

Aby zobaczyć listę dostępnych terminali napisz :

set terminal

Przykładowy wynik :

 Available terminal types:
       cairolatex  LaTeX picture environment using graphicx package and Cairo backend
           canvas  HTML Canvas object
              cgm  Computer Graphics Metafile
          context  ConTeXt with MetaFun (for PDF documents)
            corel  EPS format for CorelDRAW
             dumb  ascii art for anything that prints text
              dxf  dxf-file for AutoCad (default size 120x80)
            eepic  EEPIC -- extended LaTeX picture environment
              emf  Enhanced Metafile format
            emtex  LaTeX picture environment with emTeX specials
         epscairo  eps terminal based on cairo
         epslatex  LaTeX picture environment using graphicx package
              fig  FIG graphics language for XFIG graphics editor
              gif  GIF images using libgd and TrueType fonts
             gpic  GPIC -- Produce graphs in groff using the gpic preprocessor
          hp2623A  HP2623A and maybe others
           hp2648  HP2648 and HP2647
             hpgl  HP7475 and relatives [number of pens] [eject]
           imagen  Imagen laser printer
             jpeg  JPEG images using libgd and TrueType fonts
            latex  LaTeX picture environment
              lua  Lua generic terminal driver
               mf  Metafont plotting standard
              mif  Frame maker MIF 3.00 format
               mp  MetaPost plotting standard
             pcl5  HP Designjet 750C, HP Laserjet III/IV, etc. (many options)
         pdfcairo  pdf terminal based on cairo
              png  PNG images using libgd and TrueType fonts
         pngcairo  png terminal based on cairo
       postscript  PostScript graphics, including EPSF embedded files (*.eps)
          pslatex  LaTeX picture environment with PostScript \specials
            pstex  plain TeX with PostScript \specials
         pstricks  LaTeX picture environment with PSTricks macros
              qms  QMS/QUIC Laser printer (also Talaris 1200 and others)
            regis  REGIS graphics language
              svg  W3C Scalable Vector Graphics driver
          tek40xx  Tektronix 4010 and others; most TEK emulators
          tek410x  Tektronix 4106, 4107, 4109 and 420X terminals
          texdraw  LaTeX texdraw environment
             tgif  TGIF X11 [mode] [x,y] [dashed] ["font" [fontsize]]
             tikz  TeX TikZ graphics macros via the lua script driver
         tkcanvas  Tk/Tcl canvas widget [perltk] [interactive]
             tpic  TPIC -- LaTeX picture environment with tpic \specials
          unknown  Unknown terminal type - not a plotting device
            vttek  VT-like tek40xx terminal emulator
            xterm  Xterm Tektronix 4014 Mode


Kolor[edytuj]

Gradient koloru[edytuj]

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
Standardowy gradient w Gnuplocie

Możemy to zapisać do pliku gif:

set terminal gif
set output 'p.gif'
test palette

Zobaczmy dokładniej jak zbudowany jest gradient.

rgbformulae[edytuj]

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
Gorący gradient
Odwrócony gorący gradient


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

Definiowanie własnej palety kolorów[edytuj]

set palette defined (0 "dark-green", 1 "green", 1 "yellow", 4 "red")
test palette

Otrzymujemy nieciągły gradient.

Rysowanie danych z pliku[edytuj]

Przygotowanie pliku z danymi[edytuj]

Gnuplot może być używany jako uniwersalny program do rysowania przez inne specjalistyczne programy.

Przygotowanie pliku z danymi w C[edytuj]

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

Przygotowanie pliku z danymi w MPSolve[edytuj]

W linii komend ( bez uruchomiania gnuplota) wprowadzmy polecenie z opcją -Og :

./unisolve -Og Data/umand31.pol >Results/data.txt

Rysowanie danych z pliku[edytuj]

Przykładowy wykres zawierający dane z pliku oraz wykresy dwóch funkcji

Uruchom gnuplot:

gnuplot

i w linii komend wprowadź polecenie:

plot "data.txt" 

W cudzysłowie jest nazwa pliku, może być poprzedzona ścieżką.

Przykład :

gnuplot
set terminal png
set output "data.png"
plot "data.txt"

Rysowanie danych bez pliku[edytuj]

Możemy dane wprowadzić bezpośrednio, bez pliku, korzystając z : [1]


gnuplot << EOF
set terminal gif
set output 'plot1.gif'
plot '-' using 1:2
        1 10
        2 20
        3 32
        4 40
        5 50
        e
EOF


lub :

gnuplot -p <(echo -e 'plot "-"\n1 1\ne')

Źródła[edytuj]

  1. Stackoverflow : Gnuplotting data without a textfile