Introdução Abreviada ao Gnuplot
Salviano Salvi ano A. Leão 6 de agosto de 2018
Gnuplot
Sumário
1. Fu Funç nçõe õess Bá Bási sica cass
Sumário
1. Funções Básicas 2. Gráfico de Funções
Sumário
1. Funções Básicas 2. Gráfico de Funções
• • • •
Gráficos unidimensionais Gráficos bidimensionais Gráficos de Funções Paramétricas Gráficos em coordenadas polares
Sumário
1. Funções Básicas 2. Gráfico de Funções
• • • •
Gráficos unidimensionais Gráficos bidimensionais Gráficos de Funções Paramétricas Gráficos em coordenadas polares
3. Gráficos de Arquivos
Sumário
1. Funções Básicas 2. Gráfico de Funções
• • • •
Gráficos unidimensionais Gráficos bidimensionais Gráficos de Funções Paramétricas Gráficos em coordenadas polares
3. Gráficos de Arquivos
• •
Gráficos unidimensionais Gráficos bidimensionais
Sumário
1. Funções Básicas 2. Gráfico de Funções
• • • •
Gráficos unidimensionais Gráficos bidimensionais Gráficos de Funções Paramétricas Gráficos em coordenadas polares
3. Gráficos de Arquivos
• •
Gráficos unidimensionais Gráficos bidimensionais
4. Tipos de Terminais
Sumário
1. Funções Básicas 2. Gráfico de Funções
• • • •
Gráficos unidimensionais Gráficos bidimensionais Gráficos de Funções Paramétricas Gráficos em coordenadas polares
3. Gráficos de Arquivos
• •
Gráficos unidimensionais Gráficos bidimensionais
4. Tipos de Terminais 5. Scripts.
Gnuplot online
NOTA Atualmente há dois sites que fornecem o gnuplot na web:
• http://gnuplot.respawned.com/ • http://plotshare.com/ NOTA Exemplo de interface de um programa C++ usando o gnuplot:
• http://www.robertnz.net/gnuplot.htm NOTA Uma alternativa livre ao gnuplot é o ctioga2:
• http://ctioga2.sourceforge.net/
Medida experimentais: arquivo de dados
NOTA Para fazer um gráfico de resultado experimentais faça:
•
Crie seu arquivo de dados, tabela em um editor sem formatação, como por exemplo no GNU/Linux emacs, nano, gedit, xed, etc. No Windows use o Notepad.
•
Ao criar um arquivo separado, isso lhe garante que você poderá usar qualquer software para fazer o seu gráfico.
•
Nos softwares como o gnuplot você pode fazer o gráfico usando diretamente o arquivo de dados.
•
Nos softwares gráficos como Origin, qtiplot, Labplot, etc, você importar o seu arquivo de dados dentro de suas planilhas.
•
Crie quantas colunas forem necessária e estabeleça um padrão para a separação entre as colunas;
•
Ao usar um software gráfico nunca edite diretamente seus arquivo de dados na planilha do software. Importe o arquivo de dado no software e depois faça o gráfico. Caso contrário, você ficará restrito ao software no qual editou seus dados.
Funções Básicas
abs (x)
Para x qualquer, retorna o valor absoluto de x com o mesmo tipo de x.
abs (x)
Para x qualquer, retorna
ℜ(x)
2
+ (x)2 para x complexo.
ℑ
−π ≤ acos(x) ≤ π se −1 ≤ x ≤ 1. acosh (x) Para x qualquer, retorna um valor entre −π ≤ acos(x) ≤ π se x ≥ 1. acos (x)
Para x qualquer, retorna um valor entre
arg(x) Para x qualquer, retorna a fase de x. asin(x) Para x qualquer, retorna o sen
1
−
asinh(x) Para x qualquer, retorna o senh
x (inverso do seno). 1
−
x (inverso do seno hiperbólico).
Funções Básicas II
atan(x) Para x qualquer, retorna o tg
1
−
x (inverso da tangente).
atan2(y, x) Para x e y inteiros ou reais, retorna tg atanh(x) Para x qualquer, retorna o tgh
1
−
1
−
(y/x) (inverso da tangente).
x (inverso da tangente hiperbólica).
besj0(x) Para x inteiro ou real, retorna a função de Bessel j 0 (x). besj1(x) Para x inteiro ou real, retorna a função de Bessel j 1 (x). besy0(x) Para x inteiro ou real, retorna a função de Bessel y 0 (x). besy1(x) Para x inteiro ou real, retorna a função de Bessel y 1 (x).
Funções Básicas III
ceil((x) Para x , retorna o menor inteiro não menor que x (parte real). ceil
⌈⌉
cos((x) Para x qualquer, retorna o cosseno de x , cos x. cos cosh((x) Para x qualquer, retorna o cosseno hiperbólico de x , cosh x, . cosh erf ((x) Para x qualquer, retorna a função erro Erf (real(x)), do real(x). erf erfc((x) Para x qualquer, retorna Erfc (real(x)) = 1. erfc 1.0
− Erf(real(x)).
exp((x) Para x qualquer exp qualquer,, retorna ex .
qualquer,, retorna x , o maior inteiro não maior do que x (parte real). floor((x) Para x qualquer floor
⌊⌋
Funções Básicas IV
gamma((x) Para x qualquer, retorna a função gama Gamma (real(x)), do real(x). gamma ibeta(( p, q, x) Para x qualquer, retorna a função ibeta Ibeta (real( p, q, x)), do real( p,q ,x). ibeta inverf ((x) Para x qualquer, retorna o inverso da função erro do real( x). inverf igamma((a, x) Para x qualquer, retorna a função igama Igamma (real(a, x)), do real(a,x). igamma imag((x) Para x complexo, retorna a parte imaginária x como um número real. imag invnorm((x) Para x qualquer, retorna o inverso da distribuição normal do real(x). invnorm
Funções Básicas V
int((x) Para x real, retorna a parte inteira de x , truncando a parte decimal. int lambertw((x) Para x real, retorna a função de Lambert W . lambertw lgamma((x) Para x qualquer, retorna a função lgama Lgamma (real(x)), do real(x). lgamma log((x) Para x qualquer, retorna o logaritmo natural de x (base e ), ln x = log e x. log log10( log 10(x x) Para x qualquer, retorna o logaritmo de x na base 10 , log 10 x. norm((x) Para x qualquer, retorna a função distribuição normal (Gaussiana) do real( x). norm
Funções Básicas VI
rand(x) Para x qualquer, retorna um número pseudo aleatório Rand (real(x)). real(x) Para x qualquer, retorna a parte real de x . sgn(x) Para x qualquer, retorna 1 se x > 0,
−1 se x < 0, 0 se x = 0. O imag(x) é ignorado.
sin(x) Para x qualquer, retorna sen x. sinh(x) Para x qualquer, retorna senh x. sqrt(x) Para x qualquer, retorna
√ x.
tan(x) Para x qualquer, retorna tg x, a tangente de x . tanh(x) Para x qualquer, retorna tgh x, a tangente hiperbólica de x .
Funções Extras
column(x) Retorna um inteiro, para a coluna x durante a manipulação de dados. defined(X ) nome da variável retorna 1 se a variável X está definida, 0 senão. tm _ hour(x) Retorna um inteiro para a hora. tm _ mday(x) Retorna um inteiro para o dia do mês. tm _ min(x) Retorna um inteiro para o minuto. tm _ mon(x) Retorna um inteiro para o mês. tm _ sec(x) Retorna um inteiro para o segundo. tm _ wday(x) Retorna um inteiro para o dia da semana. tm _ yday(x) Retorna um inteiro para o dia do ano. tm _ year(x) Retorna um inteiro para o ano. valid(x) Retorna um inteiro para o teste validade da column(x) durante a manipulação de dados.
Função rand(x)
rand(0) Retorna um número pseudo aleatório no intervalo 0 valor corrente da semente interna de 32 -bits.
≤ rand(0) ≤ 1 gerado a partir do
rand( 1) Reinicializa ambas as sementes para um valor padrão.
−
rand(x) Para x > 0 inicializa ambas as sementes para um valor baseado no valor de x . rand(x, y) Para x > 0 inicializa a semente 1 (seed1) para x e a semente 2 (seed2) para y ..
Modos iterativos e batch
•
Pode-se chamar uma sessão iterativa com
•
gnuplot
•
Pode-se chamar uma sessão usando dois arquivo de comandos “graf1.gp” e “graf2.gp”:
gnuplot -persist -e "set title 'Curva do Seno'; plot sin(x)" →
gnuplot graf1.gp graf2.gp
•
Pode-se chamar uma sessão iterativa após a inicialização de umas definições padrões arquivadas no arquivo “init.gp” e seguida por um outro arquivo de comandos “grafico.gp”: gnuplot init.gp - grafico.gp
Pode-se fornecer os comandos para o gnuplot diretamente da linha de comando, e para isso usa-se a opção -persist"para que a tela gráfico não seja fechada após a execução do comando:
•
Para definir o valor das variáveis "g"e "s"antes de executar os comandos a partir de um arquivo: gnuplot -e "g=9.8; s='fig01.png'" graf.gp →
Modos iterativos e batch: exemplo terminal
Com o gnuplot pode-se trabalhar dentro do terminal iterativamente:
Modos iterativos e batch: exemplo terminal
Abra um terminal na pasta que contém o arquivo “test.gp” e chame o gnuplot. Já no ambiente iterativo do gunplot, para rodar todas as instruções contidas no arquivo “test.gp” faça:
Expressões e Operadores
• • •
Os operadores no gnuplot são os mesmos da linguagem de programação C. O ∗∗ operador (exponenciação) é suportado, como no FORTRAN. Os parenteses podem ser usados para alterar a ordem de cálculo de uma expressão.
Operadores Unitários
Símbolo
Exemplo
−
−a
+ ! ! $
+a a !a !a $3
Explicação menos unário mais unário (sem operação) complemento Negação lógica Fatorial chama argumento/coluna durante uma manipulação
Operadores Binários
Símbolo
Exemplo
∗∗ ∗
a b a b a/b a%b a + b a b a == b a! = b a
b a >= b
/ % +
−
== != < <= > >=
∗∗ ∗ −
Explicação Exponenciação Multiplicação Divisão Módulo Adição Subtração Igualdade Desigualdade Menor que Menor ou igual a Maior que Maior ou igual a ∗
Operadores Binários II
Símbolo
Exemplo
<< >> &
0xff << 1 0xff >> 1 a&b
^
a^b
| && || =
, . eq ne
ab a&&b a a=b
| ||
(a,b) A.B A eq B A ne B
Explicação Deslocamento para esquerda sem sinal Deslocamento para direita sem sinal Bit E Bit OU exclusivo Bit OU inclusivo Lógico E Lógico OU Atribuição Cálculo serial Concatenação de strings igualdade de strings Desigualdade de strings ∗ ∗ ∗
∗ ∗
Operadores Ternários
Símbolo
Exemplo
?:
a?b : c
Explicação Operação Ternária
Este operador comporta-se como em C. NOTA O operador A?B : C Resulta em B nos casos em que a expressão A é verdadeira e C nos casos em que ela é falsa.
Operadores Ternários: Exemplo
Considere, por exemplo, a função passo de Heaviside: θ(x) =
0 1
se se
x<0 x>0
passo(x) = x>0 ? 1 : 0
g(x) = x>=0 ? 1 : 1/0 f(x) = x<0 ? 0 : 1/0 plot f(x), g(x)
plot passo(x)
fornece uma função contínua. Para obter a descontinuidade deve-se fazer o gráfico passo(x) 1
1
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0
0
-10
-5
0
5
10
-10
f(x) g(x)
-5
0
5
10
Operadores Ternários: Exemplo
Considere, por exemplo, uma função tipo passo definida por:
θ (x) = f
0 0.5 1
se se x=0 se
x<0 x>0 f(x)
reset set yr[-0.1:1.1] set grid g(x) = x> 0 ? 1 : 1 / 0 f(x) = x< 0 ? 0 : 1 / 0 plot f(x), g(x), "< echo '0, 0.5'" with points ls 6 notitle →
fornece uma função contínua. Aqui usamos a habilidade do gnuplot de ler a saída padrão “stdout” para gerar o dado, como em plot "< echo '1 2'" . Para obter a descontinuidade deve-se fazer o gráfico
g(x) 1
0.8
0.6
0.4
0.2
0
-1
-0.5
0
0.5
1
Exemplo operador ternário
Para fazer o gráfico de um poço de potencial faça -1:1]; ]; set xr [-1:1
-1.1:0.1] ] set yr [-1.1:0.1 pot(x) pot (x) = abs abs(x) (x)> >0.5 ? 0 : -1 pot(x) (x) plot pot
pot(x)
reset (x,y)= y)=(x**3 - 2*x*y + y**3>0 3>0) )?1:1/0 f(x, unset colorbox 300, 30 300 0 set isosample 300, set xlabel 'x' set ylabel 'y' set sample 300 set pm3d map -2:2] ] [-2:2 -2:2] ] f(x, (x,y) t splot [-2:2 'x^3-2xy+y^3>0'
→
0
-0.2
-0.4
2
-0.6
3
3
x - 2xy + y >0 1.5
-0.8
1 0.5
-1 y
-1
-0.5
0
0.5
0
1 -0.5
Por exemplo, a função f f ((x, y ) = 1, se x3 − 2 2xy xy + + y y 3 > 0, e f f ((x, y ) = 1/0 (indefinida), 3 3 se x − 2 2xy xy + + y y < 0. O gráfico dessa função é obtido com
-1 -1.5 -2 -2
-1.5
-1
-0.5
0 x
0.5
1
1.5
2
Operadores Ternários II
Considere os dois exemplos a seguir g (x) =
sen (x)
1/x
se se
0 1
≤x<1 ≤x<2
g(x)= (x)= 0 < =x = x && x<1 ? sin sin(x) (x):1<= :1<=x x && x<2 ? 1/ x: 1/0
plot g(x)
O valor 1 1/ /0 significa não definido. Para um arquivo de dados, faça um gráfico da média dos valores das colunas 2 e 3 em função dos dados da coluna 1 , mas somente se os dados da coluna 4 forem não negativos. plot "dados.dat" using 1:( $4 $4< <0? 1/0: ($2 $2+ +$3 $3) )/2) /2)
Exemplo do Operador Ternário
A função abaixo H (x) =
f (x) = 3x 40 f ( g (x) = x2 + 2x 2x
−
−
se se
− 8
2
≤x≤6
Outros casos set xtics 1; set grid 0:10] ] set xrange [0:10 (x)=3*x-40 f(x)=3
reset set xtics 1; set grid 0:10] ] set xrange [0:10 (x)=3*x-40 f(x)=3
g(x)=(x)=-x x**2+2*x-8 2<=x x && x<=8 <=8) ) ? f(x):1/0 (x):1/0 h(x) = (2<= y1(x) y1 (x) = x<2 ? g(x):1/0 (x):1/0 y2(x) y2 (x) = x>8 ? g(x):1/0 (x):1/0 y3(x) y3 (x) = (2<= 2<=x x && x<=8 <=8) ) ? g(x):1/0 (x):1/0 "Reta" , y1 y1(x (x) ) lt 1 plot h(x) lt 7 t "Reta", notitle, notitle ,\ → y2(x y2 (x) ) lt 1 t "Parabola", "Parabola" , y3 y3( (x) lt 2 notitle →
g(x)=(x)=-x x**2+2*x-8 (x)=(2<= 2<=x x && x<=8 <=8) ) ? f(x): (x):g(x) h(x)= y(x)= (x)=(2<= 2<=x x && x<=8 <=8) ) ? g(x):1/0 (x):1/0 "Comp" , y(x) t "Ret" plot h(x) t "Comp", "Fechar r ?" pause -1 "Fecha
0 Comp. Ret. -10
0 Reta
-20
Parabola
-10 -30
-20 -40
-30 -50
-40 -60
-50 -70
-60 -80
-70 -90 0
1
2
3
4
5
6
7
8
9
10 -80
-90
Definindo Funções
No ambiente pode-se definir uma função
reset set grid set autoscale set zeroaxis
reset set grid set autoscale set zeroaxis
a=0; b=-2 ; c=3 f(x,a)=a*x**2+b*x+c set xr[-5:5] plot for [a=1:10:1] f(x,a+0.2) notitle
a=1 ; b=-2 ; c=3 f(x)=a*x**2+b*x+c plot f(x)
300
140
f(x)
250
120
100
200
80 150
60 100
40 50
20
0
0 -10
-5
0
5
10
-4
-2
0
2
4
Definindo Funções
No ambiente pode-se definir uma função
reset set grid set autoscale set zeroaxis
reset set grid set autoscale set zeroaxis
a=0; b=0; c=3 f(x,a)=a*x**2+b*x+c set xr[-5:5] plot for [n=1:10:1] f(x,a+0.2*n) notitle →
a=1; b=0 ; c=3 f(x,a)=a*x**2+b*x+c set xr[-5:5] plot for [c=0:10:1] f(x,1) notitle
35
55
50 30 45
40
25
35
20 30
25 15
20
10
15
10 5 5
0
0 -4
-2
0
2
4
-4
-2
0
2
4
No ambiente pode-se definir uma função w = 2 q = floor( tan( pi/2 - 0.1)) f(x) = sin(w*x) sinc(x) = sin(pi*x)/(pi*x) delta(t) = (t == 0) ramp(t) = (t > 0) ? t : 0 min(a,b) = (a < b) ? a : b comb(n,k) = n!/(k!*(n-k)!) len3d(x,y,z) = sqrt(x*x+y*y+z*z) set key top left plot f(x)=sin(x*a), a=0.2, f(x) lw 2, a=0.4, f(x) lw 2 →
1
f(x)=sin(x*a), a=0.2, f(x) a=0.4, f(x)
0
-1 -10
-5
0
5
10
Controle de Eixos e Escalas
• set grid ativa a grade. • set nogrid ou unset grid desativa a grade. • set xrange [x0:xf] define o intervalo de variação de x no intervalo x0 ≤ x ≤ xf . • set yrange [y0:yf] define o intervalo de variação de y no intervalo y0 ≤ y ≤ yf . • set zrange [z0:zf] define o intervalo de variação de z (z0 ≤ z ≤ zf ) em graficos (3D). • set samples n define o número de pontos n usados para fazer o gráfico. • replot f(x) ou rep f(x) adiciona o gráfico de f (x) ao anterior. • test mostra as definições padrões. • reset reinicializa as variáveis internas aos valores padrões. • clear limpa a tela.
O comando test
No gnuplot o comando “ test” gnuplot> test
mostra todos os estilos e tamanhos possíveis. t
-1 0
3
1 2 3 4 5
10 11 12 13 14 r
r
15
te
0
r
Bold Italic
20 21 22 23 24 25
ll 0
1
2
3
4
5
30 31
Tipos de curvas
set key at -1, 0.9 plot sin(x) with lines title 'linha',\ sin(x/2) with points title 'pontos',\ sin(x/3) with linespoints title 'linha+ponto',\ sin(x/4) with dots lw 4 title 'pontilhada',\ sin(x/5) with impulses title 'impulsos'
→
→
→
→
Note que o gnuplot aceita abreviações dos comandos assim: plot plot plot plot plot
sin(x/2) sin(x/2) sin(x/2) sin(x/2) sin(x/2)
w w w w w
p l lp d i
Temos ainda os seguinte comandos:
1
linewith ou lw
define a largura da linha.
define um dos tipos pré-definidos da linha.
linetype ou lt
pointsize ou ps 0
-1 -4
-2
0
2
4
define o tamanho do ponto.
Comando replot
1
set key at -1, 0.9 plot sin(x) with lines lt 7 title 'linha ',\ sin(x/2) with points ps 3 lt 2 title 'pontos',\ → sin(x/3) with linespoints ps 2 lt 1 title 'linha+ponto',\ → sin(x/4) with dots lt 8 lw 4 title 'pontilhada',\ → sin(x/5) with impulses lt 3 title 'impulsos 1' → replot sin(x/6) with impulses lw 3 lt 5 title 'impulsos 2' → →
0
-1 -4
-2
0
2
4
Exemplo de rótulos
set xrange [-2*pi:2*pi] f(x,b)=sin(x/b) plot f(x,2) set xrange [-2*pi:2*pi] f(x)=sin(x*a) plot f(x), a=0.5 set xrange [-2*pi:2*pi] f(x,a)=sin(a*x) plot f(x,0.5)
set key at -1.0,1.3 set xlabel '{/Helvetica-Oblique x}' set ylabel '{/Helvetica-Oblique y}' titulo(n) = sprintf("sen({/Helvetica-Oblique → x/%d})", n) → set xrange[-2*pi:2*pi] set yrange[-1.5:1.5] set xtics ('-2{/Symbol p}' -2*pi, '-{/Symbol p}' -pi, 0, '{/Symbol → p}' pi, '2{/Symbol p}' 2*pi) → ytics 1 set set ytics format "%3.1f" set tics scale 0.75 set zeroaxis f(x,n) = sin(x/n) plot for [n=1:10:1] f(x,n) title titulo(n) →
-2
-
0
2
Criando um arquivo de dados
reset # Número de pontos a ser usado set samples 200 # Define-se uma gaussiana f(x,a) = exp(-(x-a)*(x-a)/(1+a*0.5))+0.05 *rand(0) → titulo(n) = sprintf("coluna %d", n) # Aqui define-se o nome do arquivo set table 'iter.dat' plot [0:20] '+' using (f($1,1)):(f($1,2)):\ → (f($1,3)):(f($1,4)):(f($1,5)):(f($1,6)) w xyerror → unset table # Fim da geração do arquivo set yrange [0:16] plot for [i=1:6] 'iter.dat' u 0:(column(i)+2*i) w l l w 1.5 t → titulo(i) →
O arquivo, ’iter.dat’ é gerado com 6 parâmetros diferente, de modo que a gaussiana seja deslocada e se alargue. Note, que isso é feito com o plot para um arquivo especial, ’+’. Isto foi introduzido no gnuplot 4.4 e a finalidade deste
arquivo especial é que ao invocar ele, pode-se usar os modificadores de plot padrão mesmo com funções. Ou seja, podemos especificar “using” para uma função. A importância disso é que muitos estilos de plot requerem várias colunas, e não podíamos usar esses estilos de plot com funções sem o pseudo-arquivo ’+’. 1 2 3 14
4 5
12
10
4
2
0 0
20
40
100
120
140
200
Usando o nome do arquivo especial "+", que gera um conjunto de coordenadas, que são filtradas e o gráfico é feito usando o estilo de plot dos rótulos (ou pontos se nenhuma etiqueta for solicitada: reset f(x) = x**2 x1 = 2 set xrange[-5:5] set style line 1 pointtype 7 linecolor rgb '#22aa22' pointsize 2 → plot f(x) lw 2, \ '+' using ($0 == 0 ? x 1 : NaN):(f(x1)):(sprintf('f(%.1f)', → x1)) \ → with labels offset char 1,-0.2 left textcolor rgb 'blue' \ → point linestyle 1 notitle
1. Pode-se usar o tipo de ponto usual. 2. Só se pode usar os valores dos eixos como coordenadas (como primeiro ou segundo para os objetos acima). 3. Pode tornar-se mais difícil colocar diferentes tipos de pontos. 4. É mais envolvido usando diferentes cores de borda e de preenchimento. 25
f(x)
20
15
O $0, ou equivalentemente column(0), é o índice de coordenadas. Na declaração de uso, apenas o primeiro é considerado válido, todos os outros são ignorados (usando NaN). Observe que usar "+" requer a configuração de um xrange fixo. Isso tem as vantagens (ou desvantagens?):
10
5
f(2.0)
0 -4
-2
0
2
4
O gráfico anterior também pode ser obtido com
reset unset colorbox unset key set xrange [0:10] set cbrange [0:1] plot '+' using ($1):(sin($1)):(0.6*(1.0+sin($1))) → with lines lw 3 lc palette, \ → '+' using ($1):(sin($1)+2):($1/8.0) with → lines lw 3 lc palette, \ → '+' using ($1):(sin($1)+4):(2*exp(-$1/4)) → with lines lw 3 lc palette →
reset f(x) = x**2 x1 = 2 set xrange[-5:5] set style line 1 pointtype 7 linecolor rgb '#22aa22' pointsize 2 → plot f(x) lw 2 replot "-" using 1:(f($1)) 2.0 e with labels offset char 1,-0.2 left textcolor rgb 'blue' \ → point linestyle 1 notitle
5
4
3
2
Pode-se fazer um gradiente com:
1
0
-1
Gradiente com curvas
3
reset unset colorbox unset key set obj 1 rectangle behind from screen 0,0 to screen 1,1 → set obj 1 fillstyle solid 1.0 fillcolor rgbcolor "#cce5ff" → set xrange [0:10] set cbrange [0:1] f(x,dx) = dx + sin(x) p(x,n) = 0.6*(1.0+sin(n*x)) n=21 dx=0.1 a=0.0 plot for [i=1:n] '+' using ($1):(f($1,a+(i-1)*dx)):(p($1,2)) → with lines lw 3 lc palette →
2
1
0
-1 0
2
4
6
8
10
reset f(x,a) = exp(-(x-a)*(x-a)/(1+a*0.5))+0.05 *rand(0) → titulo(n) = sprintf("coluna %d", n) x0=0.0 xf=100.0 n=201 dx=(xf-x0)/(n-1) set print "iter2.dat" do for [i = 1:n] { x = x0+(i-1)*dx print x, f(x,1), f(x,2), f(x,3), f(x,4), f(x,5), f(x,6) → } set print set yrange [0:16] plot for [i=2:7] 'iter2.dat' u 1:(2*column(i)+2*(i-1)) w l l w 1.5 → t titulo(i-1) →
set print "iter2.dat" append print 100.5, 0.013, 0.038, 0.015, 0.010, 0.034, 0.018 → set print
16
2 14
4 6
12
10
8
6
4
Ao fechar um arquivo, se desejar adicionar mais algum dado use o flag “ append” da seguinte forma:
2
0 0
20
40
60
80
100
Gerando rede: início
reset # Definição das cores set border linewidth 1.5 set style line 1 lc rgb '#0060ad' pt 7 ps 2 lt 1 lw 2 # --- blue →
# X Y 1 2 2 3 3 2 4 1
unset key # Eixos set style line 11 lc rgb '#808080' lt 1 set border 3 back ls 11 set tics nomirror out scale 0.75 # Grid set style line 12 lc rgb'#808080' lt 0 lw 1 → set grid back ls 12
4
3
2
set xrange [0:5] set yrange [0:4] plot 'dados_01.txt' w p l s 1
Considere o arquivo de dados “dados_01.txt”, dado por:
1
0 0
1
2
3
4
5
Gerando rede: início
reset # Definição das cores set border linewidth 1.5 set style line 1 lc rgb '#0060ad' pt 7 ps 2 lt 1 lw 2 # --- blue → set style line 2 lc rgb '#949599' lt 1 lw 2 # --- grey →
Considere o arquivo de dados “dados_02.txt”, dado por: # dados_02.txt # deltaX deltaY 1 2 1 1 1 -1 1 -1
unset key # Eixos set style line 11 lc rgb '#808080' lt 1 set border 3 back ls 11 set tics nomirror out scale 0.75 # Grid set style line 12 lc rgb'#808080' lt 0 lw 1 → set grid back ls 12 set xrange [0:5] set yrange [0:4] # define o ponto de partida x=0.; y=0. a=0; b=0 plot 'dados_02.txt' u (x=x+$1):(y=y+$2) w steps ls 2,\ → '' u (a=a+$1):(b=b+$2) w points ls 1 →
4
3
2
1
0 0
1
2
3
4
5
Gerando rede: início
Usando o último código, mas considerando agora o o arquivo de dados “dados_03.txt”, dado por: # dados_03.txt # deltaX deltaY 1. 2. 1. 0. 0. 1. 1. 0. 0. -1. 1. 0. 0. -1. -3. 0. 0. 1.
4
3
2
1
0 0
1
2
3
4
5
Gerando rede
reset # Definição das cores set border linewidth 1.5 set style line 1 lc rgb '#0060ad' pt 7 ps 2 lt 1 lw 2 # --- blue → set style line 2 lc rgb '#949599' lt 1 lw 2 # --- grey → unset key # Eixos set style line 11 lc rgb '#808080' lt 1 set border 3 back ls 11 set tics nomirror out scale 0.75 # Grid set style line 12 lc rgb'#808080' lt 0 lw 1 → set grid back ls 12
# define o ponto de partida x=1; y=2 a=1; b=2 plot 'rand.dat' u (x=x+$1):(y=y+$2) w steps ls 2,\ → '' u (a=a+$1):(b=b+$2) w points ls 1 →
4
3
2
1
n=40 # Tamamho da rede # Gera arquivo de dados set print "rand.dat" do for [i = 1:n] { x = sgn(-0.50+rand(0)) a = int(10*rand(0)) if (a = = 0 ) { x=0} else { x = x*(a/a)} → y = sgn(-0.50+rand(0)) a = int(10*rand(0)) if (a = = 0 ) { y=0} else { y = y*(a/a)} → print x, y } set print
0
-1
-2
-3 -10
-8
-6
-4
-2
0
Usando colunas
reset plot "iter.dat" using 1:2 reset plot "iter.dat" using ($1): ($2) reset plot "iter.dat" using ($1):($2) with lines lt 3 lw 6
Outras opções:
• • • •
using ($1):(($2 +$3)/2) using ($1):($2 +3*($3)) using ($2):($5)/100 using ($4):($2 * sin($1))/100
Curvas preenchidas
O estilo filledcurves só é relevante para gráficos 2D. Há três possíveis variantes:
•
Primeira, é necessário uma função ou um arquivo de dados com duas colunas, e os resultados podem ser modificados pelas opções do comando cuja sintaxe é: plot ... with filledcurves [opcoes] na qual as opções podem ser: [closed | above | below | x1 | x2 | y | r[=] | xy=,]
•
Segunda, é para preencher a área entre as curvas e um dado eixo, seja um horizontal ou vertical ou um ponto. filledcurves closed
preenche uma curva fechada.
filledcurves x1
eixo x1.
filledcurves x2
eixo x2.
filledcurves y=10
linha em y = 10, paralela ao eixo x.
filledcurves xy=2,4 ponto (2, 4) dos eixos x1, y1 (na forma de um arco). filledcurves above r=2.5
•
em um plot polar, a área externa o círculo de raio 2.5.
Terceira, é necessário um arquivo de dados com três colunas: uma coordenada x e as duas coordenadas y correspondendo as duas curvas. A área entre as curvas é preenchida. A forma do arquivo é x y1 y2
Curvas preenchidas: Exemplos
reset f(x)=0.5*x**2-2 g(x)=-0.5*x**2+2 xl=6 set xrange [-xl:xl] plot [-xl:xl] f(x) w l l w 2 lt 6 notitle,\ → [-xl:xl] g(x) w l l w 2 lt 7 notitle,\ → [-2:2] '+' using 1:(f($1)):(g($1)) lt 2 with filledcurves closed → notitle,\ → f(x) w l l w 2 lt 6,\ g(x) w l l w 2 lt 7
resultado desejado. 20
f(x)
15
10
5
0
-5
-10
Note que para uma função o gnuplot não preenche a curva entre duas funções. Por isso, usa-se o arquivo especial "+" para se obter o
-15
-20 -6
-4
-2
0
2
4
6
Curvas preenchidas: Exemplos
reset f(x)=x**2 g(x)=0.5*x**2+2 x0=4 set xrange [-x0:x0] set yrange [-1:16] plot [-x0:x0] [-1:16] -x0 with filledcurve x2 lt rgb '#99ff99', \ → [-x0:x0] f(x) w l l w 2 lt 6 notitle,\ → [-x0:x0] g(x) w l l w 2 lt 7 notitle,\ → [-2:2] '+' using 1:(f($1)):(g($1)) lt 5 with filledcurves closed → notitle,\ → f(x) w l l w 2 lt 6,\ g(x) w l l w 2 lt 7
• • •
RGB colors 500+ Colors HTML Color Names 16
f(x) 14
12
10
8
6
Para achar o código hexadecimal use o software agave, ou consulte por exemplo:
4
2
• •
Gnuplot colors 0
Table of colors
-4
-3
-2
-1
0
1
2
3
4
Curvas preenchidas: Exemplos símbolo da band
reset #Define o nome de saída Nome='simb_band' set term push set terminal svg size 800,800 enhanced fname 'Verdana,14' linewidth 2 → background '#ffffff' → set output sprintf('%s.svg', Nome) #Ajusta as dimensões do gráfico set size square f(x)=0.5*x**2-2 g(x)=-0.5*x**2+2 r(x,R)= sqrt(R**2 -x**2) set samples 801 # remove as bordas do gráfico unset border # remove os tics e os números unset tics re=1.0; ri=0.5; L=2.0 plot [-L:L] -2 with filledcurve x2 lt rgb '#99ff99',\ → [-L:L] '+' using 1:(f($1)):(g($1)) lt rgb '#ffff33' with filledcurves → closed notitle, \ → [-re:re] '+' using 1:(r($1,re)):(-r($1,re)) lt rgb → '#ffffff' with filledcurves closed → notitle,\ → [-ri:ri] '+' using 1:(r($1,ri)):(-r($1,ri)) lt rgb → '#66ff00' with filledcurves closed → notitle →
set output set terminal pop !inkscape -E ../simb_band.eps simb_band.svg →
-2
Exemplo com arquivo 1/2
Considere o arquivo "artigos.dat" Date,Bloomberg,Yahoo,MSN,Google,DowJones 2013-09-01, 3, 5, 12, 14, 3 2013-09-02, 5, 6, 12, 15, 6 2013-09-03, 2, 4, 16, 12, 4 2013-09-04, 1, 3, 18, 11, 3 2013-09-05, 3, 4, 15, 13, 6 2013-09-06, 7, 3, 12, 21, 9 2013-09-07, 5, 4, 11, 18, 8
plot \ "artigos.dat" using 1:($2+$3+$4+$5+$6) title → 'Bloomberg' with filledcurves x1, → →
\
"artigos.dat" using 1:($3+$4+$5+$6) title 'Yahoo' with filledcurves → x1, \ → "artigos.dat" using 1:($4+$5+$6) title 'MSN' with filledcurves x1, → →
\
"artigos.dat" using 1:($5+$6) title 'Google' with filledcurves x1, \ → "artigos.dat" using 1:($6) title 'DowJones' with filledcurves x1 →
reset set terminal qt enhanced set title "Artigos Importados" set xdata time set timefmt "%Y-%m-%d" set datafile separator "," set ylabel "Artigos" set xlabel "Data" set xrange ["2013-09-01":"2013-09-07"] set yrange [0:10<*] set pointsize 0.8 set format x "%d/%m" set border 11 unset x2tics set xtics out nomirror set key below
Artigos Importados 60
50
40 s o g i t r A
30
20
10
0 01/09
02/09
03/09
04/09 Data
05/09
06/09
07/09
Exemplo com arquivo 2/2
reset set terminal qt enhanced set title "{/=16 Artigos Importados}" set xdata time set timefmt "%Y-%m-%d" set datafile separator "," set ylabel "Artigos" set xlabel "Data" set xrange ["2013-09-01":"2013-09-07"] set yrange [0:10<*] set pointsize 0.8 set format x "%d/%m" set border 11 unset x2tics set xtics out nomirror set key below plot \ for [i=2:6:1] \ "artigos.dat" using 1:(sum[col=i:6] column(col)) \ → title columnheader(i) with filledcurves x1, \ → for [j=2:6:1] \ "artigos.dat" using 1:(sum[col=j:6] column(col)) notitle \ → with lines lc rgb "#000000" lt -1 lw 2 →
Artigos Importados 60 50 40
s o g 30 i t r A
20 10 0 01/09
02/09 Bloomberg Yahoo
03/09
04/09 Data MSN Google
05/09
06/09
DowJones
07/09
Curvas preenchidas: Outros Exemplos
Este é um estilo disponível somente para dados. plot "dados.dat" u 1:2:3 with filledcurves plot -cos(x)/(1+0.1*x**2) w filledc y1=0 plot -cos(x)/(1+0.1*x**2) w filledc y1=0.2 plot -cos(x)/(1+0.1*x**2) w filledc above y1=0 # Aqui mostra-se uma quebra de plot 0.5*cos(x)+1.25 w filledc 0.5*cos(x)+1.25 w filledc plot 1/cosh(x) +2, 1/cosh(x)+2
linha above y1=1.5, \ below y1=1.0 < 2.6 ? 1/cosh(x)+2 : 2.6 w filledc above y1=2.4
Mais Controles Sobre os Eixos
• • • • • • •
set xtics ∆x. Aqui ∆x é o valor do intervalo de pontos no eixo x. set mxtics n número de divisões no intervalo de pontos ∆x do eixo x. set ytics ∆y Valor do intervalo de pontos no eixo y. set mytics n número de divisões no intervalo de pontos ∆y do eixo y. set xlabel ”Nome do eixo x” set ylabel ”Nome do eixo y” set title ”Nome do gráfico”
Modo de texto “enhanced”
Muitos tipos de terminal suportam o modo de texto “enhanced” no qual informações de formatação adicionais estão incorporadas na cadeia de texto. Por exemplo, " x^2"escreverá x2 . Este modo é selecionado por padrão quando você configura o terminal, mas pode ser alternado depois usando set termoption [no] enhanced
ou sendo explicito como em set label 'x_2' noenhanced
Controle ^ _ @ & ~
{/= }
Códigos de controle do modo texto enhanced Exemplo Resultado Explicação ax a^x Sobrescrito Subescrito ax a_x b acd a@^b_{cd} Caixa fantasma ocupando a largura d b Insere espaços fantasma de tamanho específico d&{space} ¯ ~a{.8-} Imprime ’-’ sobre ’a’, aumentado por .8 vezes a {/Times abc} abc Imprime abc com a fonte times {/Times*2 abc} Imprime abc com a fonte times com duas vezes o seu tamanho abc {/Times:Italic abc} Imprime abc com a fonte times com o estilo itálico abc {/Arial:Bold=20 abc} Imprime abc com a fonte arial negrita com tamanho 20 abc {/Symbol abc} Usa a fonte para símbolos αβχ {/= 20 A }
A
Seleciona uma fonte em tamanhos absolutos
reset set grid set xtics 2 set mxtics 2 set ytics 40 set mytics 2 set xrange [0:25] TITLE = "Função Parabólica \n Teste 1" set title TITLE offset char 0, char -1 set xlabel "X - Tempo (s)" set ylabel "Y- Aceleração (m/s2)" f(x,a,b,c)=a+b*x+c*x**2 plot f(x,120,-5,0.1) t "função 1" with points 3 5 rep f(x,80,+10,-0.15) t "função 2" with lines 8
Posicionamento das Legendas
• • • •
set key left bottom Canto inferior esquerdo. set key right bottom Canto inferior direito. set key left top Canto superior esquerdo. set key right top Canto superior direito.
Comando set arrow
Uma seta pode ser colocada arbitrariamente em um gráfico como comando set arrow. A sua sintaxe é a seguinte set arrow {} from to → set arrow {} from rto → set arrow {} from length angle → set arrow arrowstyle | as → set arrow {nohead | head | backhead | heads} → {size ,{,}} → {filled | empty | nofilled | noborder} → {front | back} {linestyle } → {linetype } {linewidth } → unset arrow {} show arrow {}
• é um inteiro que identifica a seta. Se
nenhuma tag for fornecida, o menor valor não utilizado de tag será atribuído automaticamente. A tag pode ser usada para excluir ou alterar uma seta específica. Para alterar qualquer atributo de uma seta existente, use o comando set arrow com a tag apropriada e especifique as partes da seta a serem alteradas. A posição da primeira extremidade da seta é sempre especificada por "de". O outro ponto final pode ser especificado usando qualquer um dos três mecanismos diferentes. Os são especificados por x, y ou x, y, z, e podem ser precedidos por primeiro, segundo, gráfico, tela ou caractere para selecionar o sistema de coordenadas. Quando a coordenadas não é especificadas o padrão é 0. Um especificador de sistema de coordenadas não vai da primeira descrição de ponto para a extremidade no segundo.
1. "to
"especifica as
coordenadas absolutas da outra extremidade.
2. 2) "rto "especifica um deslocamento para a posição "from". Para eixos lineares, coordenadas de gráficos e telas, a distância entre o ponto inicial e o ponto final correspondente à coordenada relativa dada. Para eixos logarítmicos, a coordenada dada relativa corresponde ao fator de coordenada entre o ponto inicial e final. Assim, um valor relativo negativo ou zero não é permitido para eixos logarítmicos. 3. 3) "comprimento ângulo <ângulo> 4. "especifica a orientação da seta no plano do gráfico. Novamente, qualquer um dos sistemas de coordenadas pode ser usado para especificar o comprimento. O ângulo está sempre em graus. Outras características da seta podem ser especificadas como uma seta predefinida ou fornecendo-as no comando set arrow. Para uma explicação detalhada das características da seta, veja arrowstyle.
Exemplos
Para definir uma seta apontando da origem para (1,2) com o estilo de linha 5 definido pelo usuário, use:
Para desenhar uma linha vertical da parte inferior até o topo do gráfico em x = 3, use: set arrow from 3, graph 0 to 3, graph 1
set arrow to 1,2 ls 5
Para definir uma seta da parte inferior esquerda da área de plotagem para (-5,5,3) e identificar a seta com o número 3, use:
→
nohead
Para desenhar uma seta vertical terminando com a forma-T use set arrow 3 from 0,-5 to 0,5 heads size
set arrow 3 from graph 0,0 to -5,5,3
Para alterar a seta anterior para terminar em 1,1,1, sem uma ponta de seta e com o dobro de sua largura, use: set arrow 3 to 1,1,1 nohead lw 2
→
screen 0.1,90
Para desenhar uma seta relativamente ao ponto inicial, onde as distâncias relativas são dadas nas coordenadas do gráfico, use: set arrow from 0,-5 rto graph 0.1,0.1
Multiplot 1/4 reset Nome='multiplot_01' set term push set terminal svg size 800,800 enhanced fname 'Verdana,14' linewidth 2 → background '#ffff99' → set output sprintf('%s.svg', Nome) set xrange [-pi:pi]; unset key set multiplot layout 2,2 title "Derivadas do Sen(x)" font → "Times-Roman, 22" → set style arrow 1 head filled size screen 0.03,15,135 lt 2 lw 2 → set arrow 1 from screen .45, .82 to screen .65, .82 arrowstyle 1 → set arrow 2 from screen .87, .64 to screen .87, .3 arrowstyle 1 → set arrow 3 from screen .7, .14 to screen .4, .14 arrowstyle 1 → set arrow 4 from screen .35, .35 to screen .35, .7 arrowstyle 1 → title "sin(x)" set plot sin(x) set title "sin\'(x) = cos(x)" plot cos(x) set title "sin\'\'\'(x) = cos \'\'(x) = -sin\'(x) = -cos(x)" → plot -cos(x) set title "sin\'\'(x) = cos \'(x) = -sin(x)" → plot -sin(x) unset multiplot
set output set terminal pop !inkscape -E ../multiplot_01.eps multiplot_01.svg
→
Derivadas do Sen(x) sin(x)
sin'(x) = cos(x)
1
1
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0
0
-0.2
-0.2
-0.4
-0.4
-0.6
-0.6
-0.8
-0.8
-1
-1 -3
-2
-1
0
1
2
3
-3
sin'''(x) = cos''(x) = -sin'(x) = -cos(x)
-2
-1
0
1
2
3
2
3
sin''(x) = cos'(x) = -sin(x)
1
1
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0
0
-0.2
-0.2
-0.4
-0.4
-0.6
-0.6
-0.8
-0.8
-1
-1 -3
-2
-1
0
1
2
3
-3
-2
-1
0
1
Multiplot 2/4 reset Nome='multiplot_02' set term push set terminal svg size 800,800 enhanced fname 'Verdana,14' linewidth 2 → background '#ffffff' → set output sprintf('%s.svg', Nome) unset border set multiplot unset key unset tics unset raxis set polar set size 1, .5 plot [pi:2*pi] 1 lw 5, 0.2 with filledcurves lt 4 → set origin 0, .5 set size .5, .5 plot 1 lw 2, .2 with filledcurves set origin .5, .5 plot 1 lw 2, .2 with filledcurves unset multiplot set output set terminal pop !inkscape -E ../multiplot_02.eps →
multiplot_02.svg
Multiplot 3/4
reset Nome='multiplot_03' load "salva_eps.gp" set xrange[0:4*pi] set zeroaxis set multiplot plot sin(x)*exp(-0.25*x) lw 2, exp(-x/4) lw 2 → set origin 0.5,0.5 set size 0.4,0.4
clear plot sin(x) unset multiplot set output set terminal pop
set term push set terminal postscript eps enhanced color font 'Arial,14' linewidth 2 background '#ffffff' set output sprintf('../%s.eps', Nome) → →
1
sin(x)*exp(-0.25*x) exp(-x/4) 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1
0.8
0.6
0.4
sin(x)
0
2
4
6
8
10
12
0.2
0
O Arquivo "salva_eps.gp" é
-0.2
-0.4 0
2
4
6
8
10
12
Multiplot 4/4
reset
plot h*c/x w l lc rgb "#880000",
Nome='multiplot_04' load "salva_eps.gp" h=4.136e-15 # e V s hbar=6.57e-16 # e V s c=3e17 # nm/s
set multiplot unset key set xlabel '{/Symbol l} [nm]' tc rgb →
"#0000ff"
set x2label 'Temperature [K]' set ylabel 'Energia [eV]' tc rgb "#880000" set y2label 'dE/d{/Symbol l} [meV/nm]' tc rgb "#008800" → set xrange [200:2000] set x2range [0:10] ; set yrange [0:6] set y2range [1:-7] ; set y2tics 1,-1,-7 set ytics nomirror tc rgb "#880000" set y2tics tc rgb "#008800" set xtics nomirror tc rgb "#0000ff" set x2tics set mxtics 2 ; set mytics 2 set grid xtics lt 0 lw 1 lc rgb "#0000ff" → →
→ →
-1000*h*c/x/x axes x1y2 w l lc rgb "#008800"
unset grid set xlabel " " set xtics format " " set x2tics format " " set x2label " " set ylabel " " set y2label " " set grid x2tics lt 0 lw 1 lc rgb →
"#000000"
plot 1/0 unset grid set grid ytics lt 0 lw 1 lc rgb →
"#880000"
plot 1/0 unset grid set grid y2tics lt 0 lw 1 lc rgb →
"#008800"
plot 1/0 unset multiplot set output set terminal pop
Gráfico do Multiplot 4/4
Temperatura [K] 0
2
4
6
8
10 -7
6
-6 5 -5 4 ] V e [ a i g r e n E
-4 ]
3
-3
m n / V e m [
λ
-2 2 -1 1 0
0 0 200
400
600
800
1000
1200
λ [nm]
1400
1600
1800
1 2000
d / E d
Gráficos com fundo colorido
#!/usr/bin/gnuplot -persist # Exemplo do blog Gnuplot tricks # https://gnuplot-tricks.blogspot.com/ # nome: curva_preenchida_06.gp
reset Nome='background_01' set term push # Gera um background com gradiente f(x) = x+20 g(x) = x*x*x-2.0*x*x+x+10-x*x*x*x*0.01 ruido(x) = x*(0.5-rand(0)) set sample 101 set parametric set trange [0:4] # Gera uma tabela de dados set table 'filled.tab' plot g(t)+ruido(5.0),f(t)+ruido(5.0) unset table unset parametric set iso 2, 100 set xrange [0:100]; set yrange [0:50] set table 'filledbg.tab' splot y*0.5 unset table # Faz o gráfico das funções set key left unset colorbox set border lc rgb "white" set grid front lc rgb "#dddddd" set xlabel 'Time [a.u.]' tc rgb "white" set ylabel 'Amplitude [a.u.]' tc rgb "white" → set palette defined (0 0.2 0.2 0.2, 1 0.6 0.6 0.6) →
plot 'filledbg.tab' w image t '', \ 'filled.tab' u 0:1:2 w filledcurve above lt 1 lc rgb "#467F1E" t '', \ → '' u 0:1:2 w filledcurve below lt 1 lc rgb "#802020" t '', \ → '' u 0:1 w l lt 8 lw 1 t 'First', '' u 0:2 w l lt 9 lw 1 t 'Second' → →
set terminal epscairo enhanced color font 'Verdana,14' linewidth 2 background '#ffff99' → set output sprintf('../%s.eps', Nome) →
replot set term pop replot
50 First Second 40 ] . u . a 30 [ e d u t i l p 20 m A
10
0 0
20
40 Time [a.u.]
60
80
100
#!/usr/bin/gnuplot -persist # Exemplo do blog Gnuplot tricks # https://gnuplot-tricks.blogspot.com/ # nome: curva_preenchida_07.gp
set size 1.5,1.6 set origin -.25,-.3 splot y t ''
reset
#Define o background somente do gráfico set palette model RGB functions 0.5+gray/10.0, 0.5+gray/2.0, → 0.5+gray/2.0 → set size 1.208, 1.295 set origin -0.065,-0.125 splot [0:20] y t ''
Nome='background_02' set terminal epscairo enhanced color font 'Verdana,14' linewidth 2 → background '#ffff99' → set output sprintf('../%s.eps', Nome) # Definindo as funções
reset f(x) = exp(-x/10.0)*sin(x) g(x) = exp(-x/10.0) h(x) = -exp(-x/10.0) ruido(x) = x*(0.5-rand(0)) # Simula os pontos experimentais set sample 30 set table 'test.dat' plot [0:20] f(x)+ruido(0.2) unset table
#Faz o gráfico da função set size 1,1 set origin 0,0 set xtics set ytics set xlabel 'Time [s]' set ylabel 'Position [m]' set border 1+2+4+8 set key reverse box
plot [0:20] f(x) w l lt 3 lw 2 t set sample 100 #Aqui inicia o gráfico set multiplot # Define o background de todo o fundo set palette model RGB functions 0.4+gray/1.667, 0.75+gray/4.0, → 0.4+gray/1.667 → set pm3d map set isosample 100,100 set yrange [-1:1] unset colorbox unset border
'y=sin(x)*exp(-x/10) ', \ g(x) w l lt rgb "#008800" t '', h(x) w l lt rgb "#008800" t '', \ → 'test.dat' u 1:2:($2-rand(0)*0.1-0.05): →
→ →
($2+rand(0)*0.1+0.05) w errorb pt 13 lt 1 t 'Data set 2 '
unset multiplot
1 sin
e
- 10 ata set 2
0.5 ] m [ n o i t i s o
0
-0.5
-1 0
5
10 Time [s]
15
20
Incluindo imagens
Os estilos de plotagem image, rgbimage e rgbalpha projetam uma grade uniformemente amostrada de valores de dados em um plano em 2D ou 3D. Os dados de entrada podem ser uma imagem de bitmap real, talvez convertida de um formato padrão, como PNG, ou uma matriz simples de valores numéricos.
3.5
5 - matri
3 4
2.5 2
3
1.5 2
1 0.5
1
0
# imagem_01.gp reset Nome='Imagem_01' set term push plot '-' matrix with image 5 4 3 1 0 2 2 0 0 1 0 0 0 1 0 0 1 2 4 3 e e set terminal epscairo enhanced font 'Verdana,14' linewidth 2 → set output sprintf('../%s.eps', Nome) replot set output set term pop replot
-0.5
0 -1
0
1
2
3
4
5
Esta figura ilustra a geração de um mapa de calor a partir de uma matriz de valores escalares. A paleta atual é usada para mapear cada valor na cor atribuída ao pixel correspondente.
image
Cada pixel (ponto de dados) da imagem 2D de entrada se tornará um retângulo ou um paralelepípedo no gráfico. As coordenadas de cada ponto de dados determinarão o centro do paralelepípedo. Ou seja, um conjunto de dados M × N formará uma imagem com M × N pixels. Isso é diferente do estilo de plotagem pm3d, em que um conjunto de dados M × N formará uma superfície de elementos (M − 1) × (N − 1). As direções de varredura para uma grade de dados de imagem binária podem ser controladas por palavras-chave adicionais. No exemplo a seguir incluimos uma imagen no gráfico. Primeiro identifica-se o tamanho da imagem como seguinte comando do pacote imagemagick: > identify linux.jpg linux.jpg JPEG 203x244 203x244+0+0 8-bit sRGB 11.4KB 0.000u 0:00.000
Se a imagem possuir um canal alfa (tiver um fundo transparente), deve-se usar rgbalpha caso contrário rgbimage.
Imagens
# imagem_02.gp reset Nome='Imagem_02' set term push set xrange [0:202] set yrange [0:243] plot '../Figs/linux.jpg' binary filetype=jpg with rgbalpha notitle →
# imagem_03.gp reset Nome='Imagem_03' set term push set xrange [0:202] set yrange [0:243] set view 30,9,1,1 splot '../Figs/linux.jpg' binary filetype=jpg with rgbalpha notitle →
set terminal epscairo enhanced color font 'Verdana,14' → set output sprintf('../%s.eps', Nome) replot set term pop set output replot
set terminal epscairo enhanced color font 'Verdana,14' → set output sprintf('../%s.eps', Nome) replot set term pop set output replot
250 200 300
150
250 200
100
150 100
50
50
0
250
0 200
-50
150
0
50
100
150
200
100 0 50
50
Imagem com gradiente
#!/usr/bin/gnuplot -persist reset Nome='Imagem_04' set term push set terminal epscairo font 'Verdana,14' linewidth 2 → set output sprintf('../%s.eps', Nome) # Definindo as funções f(x) = exp(-x/10.0)*sin(x) g(x) = exp(-x/10.0) h(x) = -exp(-x/10.0) set multiplot # define a background set palette model RGB functions 0.5+gray/1.75, 0.80+gray/4.0, → 0.2+gray/1.667 → set pm3d map set isosample 100,100 set yrange [-1:1] unset colorbox unset border unset xtics unset ytics set size 1.3,1.4 set origin -.15,-.22 splot y t '' set size 1,1 set origin 0,0 # Tamanho da imagem, usando o identify # identi Lin
unset tics unset border set lmargin at screen 0.2 set rmargin at screen 0.95 set bmargin at screen 0.17 set tmargin at screen 0.95 #Plot the background image plot '../Figs/Linux_logo_05.png' binary filetype=png with rgbalpha notitle → #Faz o gráfico da função set size 1,1 # Define origin set origin 0,0 set lmargin at screen 0.15 set xtics set ytics # Define the axis set xlabel 'Time [s]' set ylabel 'Position [m]' set border 1+2+4+8 set key bottom left set xrange [0:20] set yrange [-1:1] plot [0:20] f(x) w l l t 3 lw 4 t 'y=sin(x)*exp(-x/10) ', \ → g(x) w l l w 3 lt rgb "#008800" t '', h(x) w l l w 3 lt rgb "#008800" t → '' → unset multiplot set term pop set output
Imagem com background
1
0.5 ] m [ n o i t i s o
0
-0.5
-1 0
5
10 Time [s]
15
20
Gráficos paramétricos
Coordenadas Polares 1/5
Nome='polar_espiral' set term push set terminal svg size 800,800 enhanced fname 'Verdana,14' linewidth 2 → background '#ffffff' → set output sprintf('%s.svg', Nome) set size square set xtics axis nomirror set ytics axis nomirror set zeroaxis unset border set samples 500 set polar plot [0:12*pi] t set output set terminal pop replot unset parametric !inkscape -E ../polar_espiral.eps polar_espiral.svg →
40 t
30
20
10
0 -40
-30
-20
0 0
-10
-10
-20
-30
-40
10 10
20 20
30 30
40 40
Coordenadas Polares 2/5
reset Nome='polar_01' set term push set terminal svg size 800,800 enhanced fname 'Verdana,14' linewidth 2 → background '#ffffff' → set output sprintf('%s.svg', Nome) set size square set key top left set samples 800 set trange[0:4*pi] set parametric set xrang[-3:3]; set yrange[-3:3] plot sin(t), cos(t) lw 2 lt 7,\ 3*sin(t-3) lw 2, 2*cos(t+2) lw 2,\ cos(3*t) lw 2, sin(2*t) lw 2 lt 1 #set terminal epscairo size 200, 200 enhanced color font 'Verdana,14' → linewidth 2 background '#ffffff' → #set output sprintf('../%s.eps', Nome) #replot set output set terminal pop replot unset parametric !inkscape -E ../polar_01.eps polar_01.svg →
3
2
1
0
-1
-2
-3 -3
-2
-1
0
1
2
3
Coordenadas Polares 3/5
reset Nome='polar_atomo' set term push set terminal svg size 800,800 enhanced fname 'Verdana,14' linewidth 2 → background '#ffff99' → set output sprintf('%s.svg', Nome) unset border; unset tics; unset key set size square set samples 800 set trange[0:4*pi] set parametric set xrang[-3:3]; set yrange[-3:3] plot sin(t), cos(t) lw 2,\ cos(3*t) lw 2, sin(2*t) lw 2,\ 3*sin(t-3) lw 2, 2*cos(t+2) lw 2,\ 3*cos(t-3) lw 2, 2*sin(t+2) lw 2,\ 3*cos(t) lw 2, 0.5*sin(t) lw 2,\ 0.5*sin(t) lw 2, 3*cos(t) lw 2 #set terminal epscairo size 200, 200 enhanced color font 'Verdana,14' → linewidth 2 background '#ffffff' → #set output sprintf('../%s.eps', Nome) #replot set output set terminal pop replot unset parametric !inkscape -E ../polar_atomo.eps polar_atomo.svg →
Coordenadas Polares 4/5 reset Nome='polar_02' set term push set terminal svg size 800,800 enhanced fname 'Verdana,14' linewidth 2 → background '#ffffff' → set output sprintf('%s.svg', Nome) set lmargin set rmargin set bmargin set tmargin
at at at at
screen screen screen screen
0.05 0.85 0.1 0.9
# now plot the polar grid only set style line 11 lc rgb 'white' lw 2 set grid polar ls 11 set polar; set rrange[0:r] unset raxis set rtics format '' scale 0 unset parametric set for [i=0:330:30] label at first (r+0.35)*cos(i), first → (r+0.35)*sin(i)\ → center sprintf('%d', i) plot NaN w l unset multiplot
set pm3d map ; unset key set multiplot # plot the heatmap set parametric set isosamples 500 unset border unset xtics unset ytics set angles degree r = 6 set urange[0:r] # radius set vrange[0:360] # angle set xrange[-r:r]; set yrange[-r:r] set colorbox user origin 0.9,0.1 size 0.03,0.8 → splot u *cos(v), u*sin(v), (cos(v)*besj0(2*u))**2 →
1 120
60
0.8 150
30
0.6
180
0
0.5
0.4
0.3 210
330 0.2
0.1 240
300 0
Coordenadas Polares 5/5 reset Nome='polar_03' set term push set terminal svg size 800,800 enhanced fname 'Verdana,14' linewidth 2 → background '#ffffff' → set output sprintf('%s.svg', Nome) unset border set style fill solid 0.70 border set style circle radius graph 0.02, first 0.00000, 0.00000 → set style ellipse size graph 0.05, 0.03, first 0.00000 angle 0 units → xy → set dummy t, y set grid polar 0.523599 set grid noxtics nomxtics noytics nomytics noztics nomztics \ → nox2tics nomx2tics noy2tics nomy2tics nocbtics nomcbtics → set grid layerdefault lt 0 linewidth 1.00, lt 0 linewidth 1.000 → set key title "raio limitante 2.5" center → set key outside right top vertical Right noreverse enhanced autotitle → nobox → set key noinvert samplen 0.7 spacing 1 width 0 height 0 → set style textbox transparent margins 1.0, 1.0 border → set polar; set samples 200 set size ratio 1 1,1
unset xtics ; unset ytics set rrange [ 0.0000 : 4.10000 ] noreverse nowriteback → plot 3.+sin(t)*cos(5*t) with filledcurve above r=2.5 notitle lt → 4,\ → 2.5 with lines lt 1 lw 2 notitle, \ 3.+sin(t)*cos(5*t) with line lw 2 lt 7 → set output set terminal pop replot unset parametric !inkscape -E ../polar_03.eps polar_03.svg →
rai
0
1
2
3
4
mitante 2.5
Dois eixos
1
reset Nome='dois_eixos_01' set term push set terminal postscript eps enhanced color font 'Arial,14' linewidth 2 → background '#ffffff' → set output sprintf('../%s.eps', Nome) set ytics nomirror set samples 400 set y2tics 0.4 set my2tics 4 set xtics pi/4. set mxtics 4 set xtics (0, '{/Symbol p}/4' pi/4, '{/Symbol p}/2' pi/2, '3{/Symbol → p}/4' 3*pi/4, '{/Symbol p}' pi,\ → '5{/Symbol p}/4' 5*pi/4, '3{/Symbol p}/2' 3*pi/2, '7{/Symbol p}/4' → 7*pi/4, '2{/Symbol p}' 2*pi) → set grid plot [0:2*pi] sin(x) lw 2axis x1y1, \ 2*cos(8*x)*exp(-x) lw 2 axis x1y2 set output set terminal pop replot
2
sin(x) 2*cos(8*x)*exp(-x)
0.8
1.6
0.6
1.2
0.4 0.8 0.2 0.4 0 0 -0.2 -0.4 -0.4 -0.8
-0.6
-1.2
-0.8 -1 0
π/4
π/2
3π/4
π
5π/4
3π/2
7π/4
2π
-1.6
Escalas logarítmicas
http://www.gnuplotting.org/tag/logscale/
Gráficos de Superfícies
Exemplo: Supefícies
reset set isosamples 50,50 set grid set format z "%4.2f" f(x,y)=log(sqrt( x*x + y*y)) splot f(x,y)
Exemplo de Superfície
3.00 2.50 2.00 1.50 1.00 Eixo Z 0.50 0.00 −0.50 −1.00 −1.50 10 5 −10
0
−5
0 Eixo X
5
−5 −10 10
Eixo Y
set format
Formato dos valores numéricos
set hidden3D
No modo 3D, esconde o que fica atrás da superfície.
Exemplos 5: Supefícies
reset set isosamples 50,50 set grid set xlabel "X" set ylabel "Y" set zlabel "Z" set title "Exemplo de Superfície" set ztics 0.50 set format z "%4.2f" f(x,y)=sin(y/7)*cos(x/5) set cntrparam levels incremental -1,0.25,1 set contour base set hidden3d splot f(x,y) t ""
Exemplo de Superfície
1.00 0.50 Eixo Z 0.00 −0.50 −1.00 10
→
5 −10
0
−5
0 Eixo X
5
−5 −10 10
Eixo Y
Moebius 1/2
reset Nome='moebius_01' load "salva_eps.gp" set bar 1.000000 front set style circle radius graph 0.02, first 0.00000, 0.00000 → 0.3 set style ellipse size graph 0.05, 0.2 0.03, first 0.00000 angle 0 units → 0.1 0 xy → -0.1 set dummy u, v -0.2 -0.3 set style textbox transparent margins 1.0, 1.0 border → unset logscale -2.5 -2 -1.5 set parametric set isosamples 51, 31 set hidden3d back offset 1 trianglepattern 3 undefined 1 → altdiagonal bentover → set style data lines set view 45,22 set title "Fita de Moebius" set urange [ 0.00000 : 6.28319 ] noreverse nowriteback → set vrange [ -0.250000 : 0.250000 ] noreverse nowriteback → #set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, → 0 front bdefault → splot (2-v*sin(u/2))*sin(u),(2-v*sin(u/2))*cos(u),v*cos(u/2) → set output set terminal pop replot
Fita de Moebius (2-v*sin(u/2))*sin(u),(2-v*sin(u/2))*cos(u),v*cos(u/2)
2.5 2 1.5 1 0.5
-1
-0.5
0
0.5
1
1.5
2
0 -0.5 -1 -1.5 -2 2.5 -2.5
Moebius 1/2
reset Nome='moebius_02' load "salva_eps.gp" set bar 1.000000 front set style circle radius graph 0.02, first 0.00000, 0.00000 → 0.3 set style ellipse size graph 0.05, 0.2 0.03, first 0.00000 angle 0 units → 0.1 0 xy → -0.1 set dummy u, v -0.2 -0.3 set style textbox transparent margins 1.0, 1.0 border → unset logscale -2.5 -2 -1.5 set parametric set isosamples 51, 31 set hidden3d back offset 1 trianglepattern 3 undefined 1 → altdiagonal bentover → set style data lines set view 45,22 set title "Fita de Moebius" set urange [ 0.00000 : 6.28319 ] noreverse nowriteback → set vrange [ -0.250000 : 0.250000 ] noreverse nowriteback → set pm3d at s #set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, → 0 front bdefault → splot (2-v*sin(u/2))*sin(u),(2-v*sin(u/2))*cos(u),v*cos(u/2) → set output set terminal pop
Fita de Moebius (2-v*sin(u/2))*sin(u),(2-v*sin(u/2))*cos(u),v*cos(u/2)
0.3 0.2 0.1 0 -0.1 -0.2 2.5 2 1.5 1 0.5
-1
-0.5
0
0.5
1
1.5
2
0 -0.5 -1 -1.5 -2 2.5 -2.5
-0.3
Lendo arquivo
Se você tem um arquivo chamado sup.gp com o seguinte conteúdo reset set grid set xlabel "X" set ylabel "Y" set zlabel "Z" set title "Exemplo de Superfície" set ztics 0.50 set format z "%4.2f" f(x,y)=sin(y/7)*cos(x/5) set cntrparam levels incremental →
-1,0.25,1
set contour base set hidden3d splot f(x,y) t ""
Você pode chamá-lo no gnuplot com o seguinte comando gnuplot> load "sup.gp"
Rodando Scripts
Se você tem um arquivo chamado sup.gp com o seguinte conteúdo reset set grid set xlabel "X" set ylabel "Y" set zlabel "Z" set title "Exemplo de Superfície" set ztics 0.50 set format z "%4.2f" f(x,y)=sin(y/7)*cos(x/5) set cntrparam levels incremental -1,0.25,1 set contour base set hidden3d splot f(x,y) t"" pause -1
Você terá um gráfico na tela e ao pressionar enter ele será fechado.
Salvar Grafico
Exemplo gera as figuras sup.eps, sup.fig e sup.png reset set xlabel "X"; set ylabel "Y"; set zlabel "Z" set title "Exemplo de Superfície" set grid; set ztics 0.50 set format z "%4.2f" f(x,y)=sin(y/7)*cos(x/5) set cntrparam levels incremental -1,0.25,1 set contour base; set hidden3d splot f(x,y) t"" pause -1 "Tecle Return Gerar Grafico EPS" set terminal postscript landscape enhanced color lw 2 "Helvetica" 14 set out "sup.eps" replot # Volta a saida output para seu valor padrao set output # Volta para o terminal X11 set terminal x11 !ls -ah l sup.eps # Lista o tamanho do arquivo gerado pause -1 "Tecle Return Gerar Grafico FIG" set term fig big color fontsize 14 thickness 2 set out "sup.fig" replot # Volta a saida output para seu valor padrao set output # Volta para o terminal X11 set terminal x11 !ls -ah l sup.fig # Lista o tamanho do arquivo gerado pause -1 "Tecle Return Gerar Grafico PNG" set term png big color fontsize 14 thickness 2 set out "sup.png" replot # Volta a saida output para seu valor padrao set output # Volta para o terminal X11 set terminal x11 !ls -ah l sup.png # Lista o tamanho do arquivo gerado
Terminais
Terminais
gnuplot> show terminal terminal type is qt 0 enhanced font "Sans,9"
os possíveis terminais cairolatex corel emf fig latex pcl5 pop pstricks svg tgif vttek xterm
canvas dumb emtex gif lua pdfcairo postscript push tek40xx tikz wxt
cgm dxf epscairo hpgl mf png pslatex qms tek410x tkcanvas x11
context eepic epslatex jpeg mp pngcairo pstex qt texdraw tpic xlib
Exemplos:
Alguns exemplos: set terminal qt size 600,400 enhanced font 'Verdana,10' persist
Um arquivo png set terminal pngcairo size 600,400 enhanced font 'Verdana,10' set output 'grafico-01.png'
Caso omitido o tamanho padrão é 640 × 480. set terminal png transparent nocrop enhanced size 450,320 font "arial,8" set output 'Figura01.png' # # Terminal SVG set terminal svg size 1024,768 dynamic enhanced "Helvetica 14" linewidth 1.8 set output "Figura01.svg" # # Agora o terminal para o postscript set terminal postscript landscape enhanced color lw 2 "Helvetica" 14 set output "Figura01.eps"
Para os terminais svg, que são parecidos com os png set terminal svg size 600,400 fname 'Verdana' fsize 10 set output 'grafico-01.svg'
Para os terminais postscript, temos set terminal postscript eps enhanced color font 'Helvetica,10' set output 'grafico-01.eps'
Exemplo: # aumenta espessura do contorno set border linewidth 1.5 set xlabel '{/Helvetica-Oblique x}' set ylabel '{/Helvetica-Oblique y}' set xtics ('-2{/Symbol p}' -2*pi, \ '-{/Symbol p}' -pi,0, \ '{/Symbol p}' pi,'2{/Symbol p}' 2*pi) → plot f(x) title 'sin({/Helvetica-Oblique x})' \ → with lines linestyle 1, \ g(x) notitle with lines ls 2
sin(x )
1
y
0
−1 −2π
−π
0 x
π
2π
Ajuste de curvas “Fit”
Ajuste dos dado do arquivo dados.dat com uma função pré-definida qualquer, por exemplo f1(x) = a1*exp(-b1*x**2) a1 = 10; b1 = 200;
# define a funcao para o ajuste # chute inicial para a1 e b1
Agora para ajustar a curva use o comando: gnuplot> fit f1(x) 'dados.dat' using 1:2 via a1, b1 Final set of parameters =======================
Asymptotic Standard Error ==========================
a1 b1
+/- 0.01418 +/- 1.958
= 9.76472 = 429.503
(0.1452%) (0.4558%)
Já o comando: f2(x) = a2 *exp(-b2*x**2) # define a funcao para o ajuste a2 = 20; b2 = 100; # chute inicial para a2 e b2 fit f2(x) 'dados.dat' using 1:3 via a2, b2 Final set of parameters =======================
Asymptotic Standard Error ==========================
a2 b2
+/- 0.7631 +/- 314.3
= 38.1419 = 6802.34
(2.001%) (4.62%)
A curva foi ajustada e os dados agora podem ser plotados com o comando: # Titulo do grafico! set key at 0.045,37 title 'F(x)=A *exp(-B*x**2)' # Note a nova linha com o \n! set title 'Distribuição Gaussiana ajustada' # Largura do ponto! set pointsize 1.5 # Simbolo Greek! set xlabel 'Largura, {/Symbol D}x' set ylabel 'Intensidade, {/Times-Italic I}_A, (A)' # italicos! plot 'dados.dat' using 1:2 title 'Exp. 1' with points lt 1,\ 'dados.dat' using 1:3 title 'Exp. 2' with points lt 3,\ f1(x) title 'Fit Exp. 1' w l,\ f2(x) title 'Fit Exp. 2' w l
Barras de Erros
O formato do arquivo de dados
As barras de erro são suportados para gráficos 2D de arquivos de dados através da leitura de um a quatro colunas adicionais (ou usando entradas); esses valores adicionais são usados de maneiras diferentes pelos vários estilos de barras de erro. Na situação padrão, o gnuplot espera ver três, quatro ou seis números em cada linha do arquivo de dados, da seguinte forma: (x, y, ydelta), (x , Y, ylow, yhigh), (x, y, xdelta), (x, y, XLow, xhigh), (x, y, xdelta, ydelta), (X, Y, XLow, xhigh, ylow, yhigh)
A coordenada x deve ser especificada. A ordem dos números deve ser exatamente como dado acima, embora o uso qualificador using possa manipular a ordem e fornecer valores para as colunas ausentes. Por exemplo, plot 'dados.dat' plot 'dados.dat' plot 'dados.dat' plot 'dados.dat'
with errorbars # (x,y,dx,dy) using 1:2:(sqrt($1)) with xerrorbars # (x,y,dx) using 1:2:(sqrt($1)) with yerrorbars # (x,y,dy) using 1:2:($1-$3):($1+$3):4:5 with xyerrorbars # (x,y,dx,dy)
O último exemplo é para um arquivo que contém uma combinação não suportada de erros x e y relativos e absolutos. O qualificador using gera o valor absoluto xmin e xmax do erro relativo.
Tabela de estilos
Símbolos Não-conectados Conectados
Barra de erros na direção x
y
x e y
xerrorbars xerrorlines
yerrorbars yerrorlines
xyerrorbars xyerrorlines
Iteração
Novos comando com a versão 5
• Comando sum, uma somatória, cuja sintaxe é:
• Comando while. Sintaxe while () {
sum [ = :] → }
Exemplo print sum [i=1:10] i 55.
• Comando if. Sintaxe if () { ; } else { }
• Comando do. Sintaxe do for { }
Animação
Uma pequena animação Oscilador Harm nico reset set encoding utf8 set terminal qt enhanced set size square set title "{/= 16 Oscilador Harmônico}" set parametric set dummy t n=3 np=501 # Numero de pontos Volta=2*pi T=n*Volta dt=T/(np-1) # Discretização set trange [0:T] set xrange [-1:1] set yrange [-0.1:1] set zeroaxis do for[i=0:np]{ plot cos(t),cos(t)**2 with lines notitle, \ → cos(i*dt), cos(i*dt)*cos(i*dt) with points lc 3 pt 7 ps 2 t → "Partícula",\ → 1.0-abs(cos(i*dt)), 0.0 with points lc 7 pt 7 ps 2 t "Energia → Cinética" ,\ → 0.0, cos(i*dt)*cos(i*dt) with points lc 4 pt 7 ps 2 t "Energia → Potencial" → pause 0.1 }
1
Partícula Energia Cinética Energia Potencial
0
-1
0
1
Exemplos
Considere o seguinte exemplo: set multiplot layout 2,2 do for [nome in " A B C D "] { arquivo = nome . ".dat" set title sprintf("Condição %s",name) plot arquivo title nome } unset multiplot
ou ainda
set multiplot layout 2,2 fourier(k, x) = sin(3./2*k)/k * 2./3*cos(k*x) → do for [pote = 0:3] { TERMOS = 10**pote set title sprintf("%g termos das série de Fourier",TERMOS ) → plot 0.5+sum[k=1:TERMOS] fourier(k,x) notitle → } unset multiplot
for
plot for [var = inicio: fim {:incremento}]
ou plot for [var in 'algumas palavras do tipo string' ]
plot for [i=1:1000] 'dados'.i.'.dat' using 1:2 title 'Fluxo '.i # ou ainda
plot for [i=1:1000] 'dados'.i.'.dat' using 1:($2+i) title 'Fluxo '.i
reset f(x,a) = exp(-(x-a)*(x-a)/(1+a*0.5))+0.05*rand(0) title(n) = sprintf("column %d", n) set table 'iter.dat' plot [0:20] '+' using \ (f($1,1)):(f($1,2)):(f($1,3)):(f($1,4)):(f($1,5)):(f($1,6)) w xyerror unset table # set yrange [0:15] plot for [i=1:6] 'iter.dat' u 0:(column(i)+2*i) w l lw 1.5 t title(i) !rm 'iter.dat' #apag arquivo gerado
Após a reinicialização da sessão gnuplot, definimos uma função, a qual será uma Gaussiana, cujo centro e a largura é determinada pelo parâmetro "a". Em seguida, imprime-se essa função em um arquivo, ’iter.dat’, e faz-se isso por seis vezes, e cada vez com um parâmetro diferente, de modo que a Gaussiana é deslocada, alargando-se. Note, no entanto, que para fazer isso traça-se o gráfico de um arquivo especial, o ’+’. Este foi introduzido no gnuplot 4.4, e o objetivo deste arquivo especial é que, invocando ele, pode-se usar os modificadores padrões do “plot” também para funções. Isto é, pode-se especificar ’using’ para uma função. A importância disso é que muitos estilos de “plot” exigirem várias colunas, e nós não poderíamos usar esses estilos de “plot” com funções sem o ’+’ pseudo-arquivo.
Exemplo
reset unset colorbox unset key set xrange [0:10] set cbrange [0:1] plot '+' using ($1):(sin($1)):(0.5*(1.0+sin($1))) with lines lw 3 lc palette, \ '+' using ($1):(sin($1)+2):($1/10.0) with lines lw 3 lc palette
reset arquivos = "dados1 dados2 dados3 dados4 dados5"
plot for [file in arquivos] file using 1:2 with lines
ou reset arquivos = "dados1 dados2 dados3 dados4 dados5"
plot for [file in arquivos] file."dat" using 1:2 with lines
ou reset arquivos(n) = sprintf("dados_%d", n)
plot for [i=1:10] arquivos(i) using 1:2 with lines
reset set samples 201 parametric ; set angles degrees set parametric; v0=15.0; v0=15.0 ; Ang Ang=45.0 =45.0 k=0.3 =0.3; ; h=0.0 =0.0; ; g=9.8 Vx= Vx =v0*cos cos(Ang); (Ang); Vy Vy= =v0*sin sin(Ang) (Ang) np=251 np =251; ; Tq Tq= =(2.0*Vy)/ Vy)/g gk= gk =g/k; glx glx= =(Vy+ (Vy+gk)/ gk)/Vx xm= xm =(2*Vx*Vy)/ Vy)/g; ym ym= =(Vy*Vy)/ Vy)/(2*g) dt= dt =Tq/ Tq/(np-1 (np-1); ); T=0.0 =0.0; ; set trange[ trange [0: 0:Tq] Tq] x(t)= (t)= Vx * t y(t)= (t)= h + Vy * t - 0.5 * g * t**2 xr(t) xr (t)= =(1 - exp exp( (-k*t))*(Vx/ (Vx/k) yr(t) yr (t)==-gk gk*t + ( (Vy +gk)/ gk)/k ) * (1 - exp exp( (-k*t)) xr[ [0: 0:xm]; xm]; set yr yr[ [0: 0:ym]; ym]; set nokey no key set xr do for [ i=0: =0:np]{ np]{ plot x(t), y(t) , \ xr( xr (t), yr yr( (t) lt 3, \ x(T), (T), y(T) with points points lc 3 pt 7 ps 2, \ xr(T) xr (T), , yr yr(T) (T) with points points lc 4 pt 7 ps 1.6 T=T+dt }
reset 201; ; set polar set samples 201 a1=2.8; a1=2.8 ; a2 a2=-3 =-3 e1=0.85 e1 =0.85; ; e2 e2=0.9 =0.9 i=0 =0; ; np np=401 =401; ; dt dt= =(4*pi)/ pi)/np ; T=0 r1(t) r1 (t)= = a1/ a1/(11-e1 e1*cos cos(t)) (t)) r2(t) r2 (t)= = a2/ a2/(11-e2 e2*cos cos(t)) (t)) r(t)= (t)= a1/ a1/(11-e1 e1*cos cos(t)) (t)) - a2/ a2/(11-e2 e2*cos cos(t)) (t)) load "Elipses_Int.gp" "Type ret return urn to con contin tinue" ue" pause -1 "Type
e o arquivo de iteração set print "Lixo_01.dat" 0.0, 0. 0.0 0 ; print T, r1 r1(T) (T) print 0.0, set print "Lixo_02.dat" 0.0, 0. 0.0 0 ; print T, r2 r2(T) (T) print 0.0, set print "Lixo_03.dat" 0.0, 0. 0.0 0 ; print T, r(T) print 0.0, r1( (t) notitle, notitle , r2 r2( (t) notitle, notitle , r(t) notitle, notitle , \ plot r1 "Lixo_01.dat" with linespoin linespoints ts lc 3 pt 7 ps 1 title "P1", "P1" , \ "Lixo_02.dat" with linespoin linespoints ts lc 4 pt 7 ps 1 title "P2", "P2" ,\ "Lixo_03.dat" with linespoin linespoints ts lc 5 pt 7 ps 1 title "Pr" T=T+dt; i=i+1 (i<=2*np) reread if (i<=2
reset set samples 201 set polar a1=2.8; a1=2.8 ; a2=-3 a2 =-3 e1=0.85 e1 =0.85; ; e2 e2=0.9 =0.9 i=0 np=401 np =401 dt= dt =(4*pi)/ pi)/np T=0 r1(t) r1 (t)= = a1/ a1/(11-e1 e1*cos cos(t)) (t)) r2(t) r2 (t)= = a2/ a2/(11-e2 e2*cos cos(t)) (t)) r(t)= (t)= a1/ a1/(11-e1 e1*cos cos(t)) (t)) - a2/ a2/(11-e2 e2*cos cos(t)) (t)) do for [ i=0: =0:np]{ np]{ set print "Lixo_01.dat" 0.0, 0. 0.0 0 print 0.0, r1(T) (T) print T, r1 set print "Lixo_02.dat" 0.0, 0. 0.0 0 print 0.0, r2(T) (T) print T, r2 set print "Lixo_03.dat" 0.0, 0. 0.0 0 print 0.0, print T, r(T) r1( (t) notitle, notitle , r2 r2( (t) notitle, notitle , r(t) notitle, notitle , \ plot r1 "Lixo_01.dat" with linespoin linespoints ts lc 3 pt 7 ps 1 title "P1", "P1" , \ "Lixo_02.dat" with linespoin linespoints ts lc 4 pt 7 ps 1 title "P2", "P2" ,\ "Lixo_03.dat" with linespoin linespoints ts lc 5 pt 7 ps 1 title "Pr" T=T+dt }
Gnuplot na linha de comando
# echo 'set xtic rotate by 270; set style data histograms; \ set style fill solid 1.00 border -1; \ plot "< du -h -d 1 | sed 's#./##g' " using 1:xtic(2); \ pause 10'| gnuplot -persist
56 - - 7 - 84988 5 :;<
" # % " $ , $ . , 0 0 $ 0 , 1 ' ' . * - ( & ( ( " " ! $ ( + * / - * ( $ ' ' / + ) ! ( ( /
0 . 4 2 2 / ! 3 - -
Gerando um gráfico aleatório
# awk 'BEGIN{for(i=1;i<=100;i++) print int(101 *rand()) int(101 *rand())}' | \ gnuplot -persist -e "plot '-'"
Referências
Blogs úteis
• Gnuplot not so Frequently Asked Questions • Gnuplotting • Gnuplot tricks • Gnuplot surprising • Impossible gnuplot graphs • Math - Blog • Gnuplot homepage • Water Programming: A Collaborative Research Blog • Gnuplot in Action