@c Language: Brazilian Portuguese, Encoding: iso-8859-1
@c /Plotting.texi/1.41/Fri Jun  8 17:19:03 2007/-ko/
@iftex
@hyphenation{ca-rac-te-res}
@end iftex
@menu
* Funções e Variáveis Definidas para Montagem de Gráficos::    
@end menu

@node Funções e Variáveis Definidas para Montagem de Gráficos,  , Montando Gráficos, Montando Gráficos
@section Funções e Variáveis Definidas para Montagem de Gráficos

@deffn {Função} contour_plot (@var{expr}, @var{x_range}, @var{y_range}, @var{opções}, ...)

Monta gráficos de contorno (curvas de nível) de @var{expr}
sobre a região @var{x_range} por @var{y_range}.
Quaisquer argumentos adicionals são tratados da mesma forma que em @code{plot3d}.

@code{contour_plot} somente trabalha quando o formato do gráfico for @code{gnuplot} ou @code{gnuplot_pipes}.

Veja também @code{implicit_plot}.

Exemplos:

@c ===beg===
@c contour_plot (x^2 + y^2, [x, -4, 4], [y, -4, 4]);
@c contour_plot (sin(y) * cos(x)^2, [x, -4, 4], [y, -4, 4]);
@c F(x, y) := x^3 + y^2;
@c contour_plot (F, [u, -4, 4], [v, -4, 4]);
@c contour_plot (F, [u, -4, 4], [v, -4, 4], [gnuplot_preamble, "set size ratio -1"]);
@c set_plot_option ([gnuplot_preamble, "set cntrparam levels 12"])$
@c contour_plot (F, [u, -4, 4], [v, -4, 4]);
@c ===end===
@example
(%i1) contour_plot (x^2 + y^2, [x, -4, 4], [y, -4, 4]);
(%o1) 
(%i2) contour_plot (sin(y) * cos(x)^2, [x, -4, 4], [y, -4, 4]);
(%o2) 
(%i3) F(x, y) := x^3 + y^2;
                                   3    2
(%o3)                  F(x, y) := x  + y
(%i4) contour_plot (F, [u, -4, 4], [v, -4, 4]);
(%o4) 
(%i5) contour_plot (F, [u, -4, 4], [v, -4, 4], [gnuplot_preamble, "set size ratio -1"]);
(%o5) 
(%i6) set_plot_option ([gnuplot_preamble, "set cntrparam levels 12"])$

(%i7) contour_plot (F, [u, -4, 4], [v, -4, 4]);
@end example

@end deffn

@c INSPECTING src/plot.lisp AND TRYING SOME EXAMPLES,
@c IT APPEARS THAT in_netmath HAS NO EFFECT ON plot2d
@c AND ONLY EFFECT ON plot3d IS TO CAUSE OPENMATH OUTPUT TO BE WRITTEN TO CONSOLE
@c WHEN [plot_format, openmath] IS SET.
@c NOT CONVINCED WE REALLY WANT TO DOCUMENT THIS VARIABLE
@defvr {Variável} in_netmath
Valor padrão: @code{false}

Quando @code{in_netmath} é @code{true},
@code{plot3d} imprime uma saída OpenMath para o console se @code{plot_format} é @code{openmath};
caso contrário @code{in_netmath} (mesmo se @code{true}) não tem efeito.
@code{in_netmath} não tem efeito sobre @code{plot2d}.

@end defvr

@deffn {Função} plot2d (@var{expr}, @var{x_range}, ..., @var{opções}, ...)
@deffnx {Função} plot2d ([@var{expr_1}, ..., @var{expr_n}], ..., @var{opções}, ...)
@deffnx {Função} plot2d ([@var{expr_1}, ..., @var{expr_n}], @var{x_range},..., @var{opções}, ...)

onde @var{expr}, @var{expr_1}, ..., @var{expr_n} pode ser uma entre
expressões, ou funções do Lisp ou do Maxima ou operadores, ou uma lista com
qualquer das formas: @code{[discrete, [@var{x1}, ..., @var{xn}],
[@var{y1}, ..., @var{yn}]]}, @code{[discrete, [[@var{x1}, @var{y1}],
..., [@var{xn}, ..., @var{yn}]]} ou @code{[parametric, @var{x_expr},
@var{y_expr}, @var{t_range}]}.

Mostra um gráfico de uma ou mais expressões como uma função de uma
variável.

@code{plot2d} monta o gráfico da expressão @var{expr} ou muitas expressões
@code{[@var{name_1}, ..., @var{name_n}]}. As expressões que não forem
paramétricas ou discretas podem todas depender somente de uma
variável @var{var} e isso torna obrigatório o uso de @var{x_range} para
nome daquela variável e fornece seus valores de máximo e de mínimo, usando a
sintaxe: @code{[@var{variable}, @var{min}, @var{max}]}. O gráfico irá
mostrar o eixo horizontal associado aos valores de @var{min} e de @var{max}.

Uma expressão a ser montado o gráfico pode também ser fornecida na forma discreta ou
na forma paramétrica. A saber, como uma lista iniciando-se com a palavra ``discrete''
ou a palavra ``parametric''. A palavra chave @var{discrete} deve ser seguida por duas
listas de valores, ambas com o mesmo comprimento, que são as coodenadas horizontais e
as coordenadas verticais de um conjunto de pontos; alternativamente, as coordenadas
de cada ponto pode ser colocada dentro de uma lista com dois valores, e todas as
coordenadas dos pontos podem estar dentro de outra lista. A palavra chave
@var{parametric} deve ser seguida por douas expressões @var{x_expr} e
@var{y_expr}, e um intervalo da forma @code{[@var{param}, @var{min},
@var{max}]}. As duas expressões devem depender somente do parâmetro
@var{param}, e o gráfico irá mostrar o caminho percorrido pelo ponto
com coordenadas (@var{x_expr}, @var{y_expr}) com @var{param} variando
de @var{min} a @var{max}.

O intervalo do eixo vertical não é obrigatório. É somente mais uma das
opções para o comando, com a sintaxe: @code{[y, @var{min},
@var{max}]}. Se aquela opção for usada, o gráfico irá mostrar aquele intervalo
completo, mesmo se a expressão não ocupe todo aquele intervalo. De outra forma,
se um intervalo vertical não for especificado através de @code{set_plot_option}, as
extremidade do eixo vertical serão encontrada automaticamente.

Todas as outras opções podem também serem listas, iniciando-se com o nome da
opção. A opção @var{xlabel} pode ser usada para fornecer um ótulo para o
eixo horizontal; se aquela opção não for usada, o eixo horizontal irá
ser rotulado com o nome da variável especificada em @var{x_range}, ou
com a expressão @var{x_expr} no caso de apenas uma expressão
paramétrica, ou isso irá ser deichado em branco de outra forma.

Um rótulo para o eixo vertical pode ser fornecido com a opção
@var{ylabel}. Se existir somente uma expressão a ser montado o gráfico e a
opção @var{ylabel} não tiver sido usada, o eixo vertical irá ser rotulado com
aquela expressão, a menos que ela seja muito larga, ou com a expressão
@var{y_expr} se a expressão for paramétrica, ou com o texto
``discrete data'' se a expressão for discreta.

As opções @code{[logx]} e @code{[logy]} não precisam de quaisquer
parâmetros. Elas irão tornar os eixos horizontal e vertical sejam
escritos em escala logarítmica.

Se houverem muitas expressões para serem montados os gráficos respectivos, uma legenda irá ser
escrita para identificar cada uma das expressões. Os rótulos que podem ser
usados naquela legenda podem ser fornecidos com a opção @var{legend}. Se a opção @var{legend}
não for usada, Maxima irá criar rótulos a partir das expressões.

Por padrão, as expressões terão seus gráficos montados como um conjunto de segmentos de reta
saltando pontos adjacentes dentro de um conjunt de pontos que é um dos fornecidos entre
a forma @var{discrete}, ou calculado automaticamente a partir da expressão
fornecida, usando um algorítmo que automaticamente adapta os passos entre
os pontos usando como uma estimativa inicial do total número de pontos
o conjunto de valores com a opção @var{nticks}. A opção @var{style} pode ser
usada para fazer uma das expressões serem representadas como um conjunto de
pontos isolados, ou como pontos e segmentos de reta.

Existem muitas opções globais armazenadas na lsita @var{plot_options}
que pode ser modificada com a função @code{set_plot_option}; qualque
daquelas opções globais pode ser sobrescrita com opções fornecidas no
comando @var{plot2d}.

Uma função a ter seu gráfico montado pode ser especificada como o nome de uma função
do Maxima ou do Lisp ou um operador, uma expressão lambda do Maxima, ou uma expressão
geral do Maxima.  Se especificado como um nome ou uma expressão lambda, a
função deve ser uma função de um argumento.

@c PUT EXAMPLES FOR PRECEDING SIMPLE FORMS OF plot2d HERE
@b{Exemplos:}

Gráficos de funções comuns.

@c ===beg===
@c plot2d (sin(x), [x, -%pi, %pi])$
@c ===end===
@example
(%i1) plot2d (sin(x), [x, -%pi, %pi])$
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting6,8cm}
@end ifnotinfo

@c ===beg===
@c plot2d (sec(x), [x, -2, 2], [y, -20, 20])$
@c ===end===
@example
(%i1) plot2d (sec(x), [x, -2, 2], [y, -20, 20])$
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting7,8cm}
@end ifnotinfo

Montando gráfico de funções pelo nome.

@c ===beg===
@c F(x) := x^2 $
@c :lisp (defun |$g| (x) (m* x x x))
@c H(x) := if x < 0 then x^4 - 1 else 1 - x^5 $
@c plot2d ([F, G, H], [u, -1, 1], [y, -1.5, 1.5])$
@c ===end===
@example
(%i1) F(x) := x^2 $
@group
(%i2) :lisp (defun |$g| (x) (m* x x x))
$g
@end group
(%i2) H(x) := if x < 0 then x^4 - 1 else 1 - x^5 $
(%i3) plot2d ([F, G, H], [u, -1, 1], [y, -1.5, 1.5])$
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting10,8cm}
@end ifnotinfo

Podemos montar o gráfico de um círculo usando um gráfico paramétrico com um parâmetro
@var{t}. Não é necessário fornecer um intervalo para intervalo horizontal,
uma vez que o intervalo do parâmetro @var{t} determina o
domínio. Todavia, usaremos a opção 
@var{same_xy} para obter a mesma escala em ambos os eixos:

@c ===beg===
@c plot2d([[parametric, cos(t), sin(t), [t,0,2*%pi]], -abs(x)],
@c          [x, -sqrt(2), sqrt(2)], same_xy)$
@c ===end===
@example
@group
(%i1) plot2d([[parametric, cos(t), sin(t), [t,0,2*%pi]], -abs(x)],
         [x, -sqrt(2), sqrt(2)], same_xy)$
@end group
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting12,8cm}
@end ifnotinfo

Exemplo de um gráfico logarítmico:
@c ===beg===
@c plot2d (exp(3*s), [s, -2, 2], logy)$
@c ===end===
@example
(%i1) plot2d (exp(3*s), [s, -2, 2], logy)$
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting9,8cm}
@end ifnotinfo

Exemplo de gráfico discreto, definindo as coordenadas x e y por separado:

@c ===beg===
@c plot2d ([discrete, makelist(i*%pi, i, 1, 5),
@c                            [0.6, 0.9, 0.2, 1.3, 1]])$
@c ===end===
@example
(%i1) plot2d ([discrete, makelist(i*%pi, i, 1, 5),
                            [0.6, 0.9, 0.2, 1.3, 1]])$
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting14,8cm}
@end ifnotinfo

O gráfico de pontos pode ser mostrado juntamente com um gráfico da
função teorética/doutrinária/estética que prevê as coordenads dos pontos:

@c ===beg===
@c xy: [[10, .6], [20, .9], [30, 1.1], [40, 1.3], [50, 1.4]]$
@c plot2d([[discrete, xy], 2*%pi*sqrt(l/980)], [l,0,50],
@c         [style, points, lines], [color, red, blue],
@c         [point_type, asterisk],
@c         [legend, "experiment", "theory"],
@c         [xlabel, "pendulum's length (cm)"],
@c         [ylabel, "period (s)"])$
@c ===end===
@example
(%i1) xy: [[10, .6], [20, .9], [30, 1.1], [40, 1.3], [50, 1.4]]$
@group
(%i2) plot2d([[discrete, xy], 2*%pi*sqrt(l/980)], [l,0,50],
        [style, points, lines], [color, red, blue],
        [point_type, asterisk],
        [legend, "experiment", "theory"],
        [xlabel, "pendulum's length (cm)"],
        [ylabel, "period (s)"])$
@end group
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting16,8cm}
@end ifnotinfo

Veja também @code{plot_options}, que descreve opções de montagem de gráfico e tem mais exemplos.

@end deffn


@defvr {Variável de sistema} plot_options
Elementos dessa lista estabelecem as opções padrão para a montagem do gráfico.
Se uma opção está presente em uma chamada a @code{plot2d} ou @code{plot3d},
esse valor tem precedência sobre a opção padrão.
De outra forma, o valor em @code{plot_options} é usado.
Opções padrão são atribuídas por @code{set_plot_option}.

Cada elemento de @code{plot_options} é uma lista de dois ou mais ítens.
O primeiro item é o nome de uma opção, e os restantes compreendem o valor ou valores
atribuídos à opção.
Em alguns casos, o valor atribuído é uma lista, que pode compreender muitos ítens.

As opções de montagem de gráfico que são reconhecidas por @code{plot2d} e @code{plot3d} são as seguintes:

@itemize @bullet
@item
Opção: @code{plot_format}

Determina qual interface gráfica é usada por @code{plot2d} e por
@code{plot3d}.

@itemize @bullet
@item
Valor: @code{gnuplot} padrão para windows

Gnuplot é o mais avançado pacote de montagem de gráficos entre os pacotes
disponíveis no Maxima. Esse valor requer uma instalação externa do gnuplot.
@item
Valor: @code{gnuplot_pipes} padrão nas plantaformas não windows

Similar ao formato @code{gnuplot} exceto que a comunicação com o
gnuplot é realizada através de um pipe. Esse valor pode ser usado para montar um gráfico na tela,
para redirecionar a saída do gráfico para um arquivos é melhor usar o formato @code{gnuplot}.
@item
Valor: @code{mgnuplot}

Mgnuplot é um ambiente montado em volta do gnuplot baseado no Tk.  Esse ambiente está incluído na
distribuíção do Maxima.  Mgnuplot oferece uma GUI rudimentar para o gnuplot,
mas tem menos recursos em geral que a interface plana do
gnuplot.  Mgnuplot requer uma instalação externa do gnuplot e
Tcl/Tk.
@item
Valor: @code{openmath}

Openmath é um programa gráfico escrito em Tcl/Tk. Este formato é fornecido pelo pacote
Xmaxima, que é distribuído junto com Maxima; com o objetivo de usar esse
formato você pode instalar o pacote Xmaxima, e o Openmath irá trabalhar não somente
a partir do Xmaxima em si mesmo, mas também a apartir da linha de comando e outras GUI's para
o Maxima.
@end itemize

@item
Opção: @code{run_viewer}

Controla se o visualizador apropriado para o formato da montagem do gráfico pode ou não
ser executado.

@itemize @bullet
@item
@c DOES FALSE IMPLY THE OUTPUT FILE IS GENERATED AND NOT SHOWN ?? OR IS NOTHING GENERATED ??
Valor padrão: @code{true}
 
Executa o programa visualizador.
@item
Valor: @code{false}

Não executa o programa visualizador.
@end itemize

@item
Opção: @code{y}

O intervalo vertical do gráfico.

Exemplo:

@example
[y, - 3, 3]
@end example
Especifica intervalo vertical para [-3, 3].

@item
Opção: @code{plot_realpart}

Quando @code{plot_realpart} for @code{true},
a parte real de um valor complexo @var{x} é mostrada;
isso é equivalente a mostrar @code{realpart(@var{x})} em lugar de @var{x}.
De outra forma,
somente valores com a parte imaginária igual a 0 são mostrados na tela,
e valores complexos são ignorados.

Exemplo:

@example
plot2d (log(x), [x, -5, 5], [plot_realpart, false]);
plot2d (log(x), [x, -5, 5], [plot_realpart, true]);
@end example
O valor padrão é @code{false}.

@item
Opção: @code{nticks}

Em plot2d, essa opção é fornece o número inicial de pontos usado pela
rotina adaptativa de montagem de gráficos para funções de montagem de gráfico. Ess número inicial de pontos é também
o número de pontos que isrá ser mostrado em um gráfico paramétrico.

Exemplo:

@example
[nticks, 20]
@end example
O padrão para @code{nticks} é 10.

@item
Opção: @code{adapt_depth}

O número maximo de quebras usada pela rotina adaptativa de montagem do gráfico.

Exemplo:

@example
[adapt_depth, 5]
@end example
O padrão para @code{adapt_depth} é 10.

@item
Opção: @code{xlabel}

O rótulo para o eixo horizontal em um gráfico bidimensional.

Exemplo:
@example
[xlabel, "Time in seconds"]
@end example

@item
Opção: @code{ylabel}

O rótulo do eixo vertical em gráficos bidimensionais.

Exemplo:
@example
[ylabel, "Temperatura"]
@end example

@item
Opção: @code{logx}

Essa opção faz com que o eixo horizontal de um gráfico bidimensional seja desenhado
em proporção logarítmica. Essa opção não precisa de quaisquer parâmetros adicionais.

@item
Opção: @code{logy}

Essa opção faz com que o eixo vertical de um gráfico bidimensional seja desenhado
em proporção logarítmica. Essa opção não precisa de quaisquer parâmetros adicionais.

@item
Opção: @code{legend}

Os rótulos para várias expressões em um gráfico bidimensional com muitas
expressões. Se houverem mais expressões que o número de rótulos
fornecidos, eles irão ser repetidos. Por padrão, os nomes das expressões
ou funçõe irão ser usados, ou as palavras discrete1, discrete2, ..., para
conjuntos discretos de pontos.

Exemplo:
@example
[legend, "Conj 1", "Conj 2", "Conj 3"]
@end example

@item
Opção: @code{style}

Os estilos que irão ser usados para várias funções ou conjuntos de dados
em um gráfico bidimensional. A palavra @var{style} deve ser seguida por um ou mais
estilos. Se houverem mais funções e conjuntos de pontos que estilos
fornecidos, os estilos irão ser repetidos. Cada estilo pode ser um entre os seguintes
@var{lines} para segmentos de reta, @var{points} para pontos isolados,
@var{linespoints} para segmentos e pontos, ou @var{dots} para pequenos
pontos isolados. Gnuplot aceita também o estilo @var{impulses}.

Cada um dos estilos pode também ser fechado dentro de uma lista com alguns parâmetros
adicionais. @var{lines} aceita um ou dois números: a largura da
linha e um inteiro que identifica uma cor. @var{points} aceita um ou
dois parâmetros; o primeiro parâmetro é o raio dos pontos e
o segundo parâmetro é um inteiro que para o Gnuplot seleciona diferentes
ajustes e cores para os ponots e em Openmath modifica a cor
usada para os pontos. @var{linesdots} aceita até quatro parâmetros;
os primerios dois possuem o mesmo significado que em @var{lines} e os últimos dois possuem o mesmo
significado que em @var{points}.

Exemplo:
@example
[style,[lines,2,3],[points,1,4]]
@end example

No Gnuplot, esse exemplo irá montar o gráfico da primeira (e terceira, quinta, etc)
expressão com segmentos de retas azuis de largura 2, ea segunda (e
quarta, sexta, etc) expressão com quadrados verdes de tamanho 1. No
Openmath, a primeira expressão irá ser mostrada com segmentos da cor magenta de
largura 2, e o segundo com pontos alaranjados de raio 1; note que
openmath_color(3) openmath_color(4) retornam ``magenta'' e
``orange'' (alaranjado).

O padrão para a opção de estilo é @var{lines} com largura 1, e
diferentes cores.

@item
Opção: @code{grid}

Escolhe o número de pontos da grade para usar nas direções x e y
para montagem de gráficos tridimensionais.

Exemplo:
@example
[grid, 50, 50]
@end example
Escolhe a grade para 50 por 50 pontos.  A grade padrão é 30 por 30.

@item
Opção: @code{transform_xy}

Permite que transformações sejam aplicadas à montagem de gráficos tridimensionais.

Exemplo:
@example
[transform_xy, false]
@end example
O valor padrão de @code{transform_xy} é @code{false}.  Se o valor padrão de @code{transform_xy} não é @code{false}, pode ser
a saída de

@example
make_transform ([x, y, z], f1(x, y, z), f2(x, y, z), f3(x, y, z))$
@end example
A transformação @code{polar_xy} é previamente definida no Maxima.  Isso fornece a mesma
transformação que
@example
make_transform ([r, th, z], r*cos(th), r*sin(th), z)$
@end example
@end itemize

@b{Opções do Gnuplot:}

Existem muitas opções de montagem de gráfico específicas para gnuplot.  Algumas dessas
opções são naturais do gnuplot, especificados como seq@"{u}ências de caracteres. Consulte a
documentação do gnuplot para mais detalhes.

@itemize @bullet
@item
Opção: @code{gnuplot_term}

Escolhe a saída para o tipo terminal para o gnuplot.
@itemize @bullet
@item
Valor padrão: @code{default}

A saída do Gnuplot é mostrada em uma janela gráfica separada.

@item
Valor: @code{dumb}

A sída do Gnuplot é mostrada no console do Maxima por meio de uma "concepção artística em ASCII" aproximada para gráficos.

@item
Valor: @code{ps}

Gnuplot gera comandos na linguagem PostScript de descrição de página.
Se a opção
@code{gnuplot_out_file} for escolhida para @var{nomearquivo}, gnuplot escreve os comandos PostScript em @var{nomearquivo}.
De outra forma, Esse arquivo é salvo com o nome @code{maxplot.ps}.

@item
Valor: qualquer outra especificação válida do terminal @code{term} do gnuplot

Gnuplot pode gerar saídas em muitos outros formatos gráficos tais
como png, jpeg, svg etc.  Paa criar gráficos em todos esses formatos a opção
@code{gnuplot_term} pode ser escolhida para qualquer terminalsuportado pelo gnuplot (símbolo)
ou mesmo especificação completa de terminal do gnuplot com quaisquer opções (seq@"{u}ência de caracteres).
Por exemplo @code{[gnuplot_term,png]} cria saídas no formato PNG (Portable
+Network Graphics) enquanto @code{[gnuplot_term,"png size 1000,1000"]}
cria PNG de tamanho 1000x1000 pixels. 
Se a opção @code{gnuplot_out_file} for escolhida para @var{nomearquivo}, gnuplot 
escreve a saída para @var{nomearquivo}. De outra forma, esse arquivo é gravado com o nome de
@code{maxplot.@var{term}}, onde @var{term} é o nome do terminal do
gnuplot .
@end itemize

@item
Opção: @code{gnuplot_out_file}

Escreve a saída do gnuplot para um arquivo.

@itemize @bullet
@item
Valor padrão: @code{false}

Nenhum arquivo de saída especificado.
@item
Valor: @var{nomearquivo}

Exemplo: @code{[gnuplot_out_file, "meugrafico.ps"]}
Esse exemplo envia a saída PostScript para o arquivo @code{meugrafico.ps} quando
usada conjuntamente com o terminal PostScript do gnuplot.
@c DOES OUTPUT FILE != FALSE IMPLY DON'T RUN THE VIEWER ??
@c WHAT HAPPENS IF OUTPUT FILE IS SPEFICIED BUT TERMINAL IS NOT PS ??
@end itemize

@item
Opção: @code{gnuplot_pm3d}

Controla o uso do modo PM3D, que tem recursos
avançados em 3D.  PM3D está somente disponível no gnuplot em versões após a 3.7.  O
valor padrão para @code{gnuplot_pm3d} é @code{false}.

Exemplo:

@example
[gnuplot_pm3d, true]
@end example

@item
Opção: @code{gnuplot_preamble} 

Insere comandos antes que o gráfico seja
desenhado.  Quaisquer comandos válidos para o gnuplot podem ser usados.  Multiplos comandos
podem ser separados com um ponto e vírgula.  O exemplo mostrado produz uma
escala numérica na montagem do gráfico.  O valor padrão para @code{gnuplot_preamble} é uma seq@"{u}ência de caracteres vazia @code{""}.

Exemplo:

@example
[gnuplot_preamble, "set log y"]
@end example

@item
Opção: @code{gnuplot_curve_titles}

Controla os títulos dados na chave da montagem do gráfico.  O
valor padrão é @code{[default]}, que automaticamente escolhe o título de cada
curva para a função cujo gráfico está sendo construído. Se não contiver @code{[default]}, @code{gnuplot_curve_titles}
pode conter uma lista de seq@"{u}ências de caracteres,
cada uma das quais é @code{"title '@var{title_string}'"}.
(Para disabilitar a chave de impressão de gráfico, adicione @code{"set nokey"} a @code{gnuplot_preamble}.)

Exemplo:

@example
[gnuplot_curve_titles,
["title 'Minha primeira função'", "title 'Minha segunda função'"]]
@end example

@item
Opção: @code{gnuplot_curve_styles}

Uma lista de seq@"{u}ências de caracteres controlando a aparência
das curvas, i.e., cor, largura, brilho, etc., para serem enviadas para o
comando de montagem do gráfico do gnuplot.  O valor padrão é
@code{["with lines 3", "with lines 1", "with lines 2", "with lines 5", "with lines 4", "with lines 6", "with lines 7"]}, que circula através de diferentes cores.  Veja a
documentação do gnuplot de @code{plot} para maiores informações.

Exemplo:

@example
[gnuplot_curve_styles, ["with lines 7", "with lines 2"]]
@end example

@item
Opção: @code{gnuplot_default_term_command}

O comando gnuplot para escolher o
tipo de terminal para o terminal padrão. O valor padrão é @code{set
term windows "Verdana" 15} em sistemas windows, e @code{set term x11
font "Helvetica,16"} em sistemas de janelas do X11.
 
Exemplo:

@example
[gnuplot_default_term_command, "set term x11"]
@end example

@item
Opção: @code{gnuplot_dumb_term_command}

O comando gnuplot para escolher o
tipo de terminal para o terminal dumb.  O valor padrão é @code{"set term dumb 79 22"},
que faz a saída texto com 79 caracteres por 22
caracteres.

Exemplo:

@example
[gnuplot_dumb_term_command, "set term dumb 132 50"]
@end example

@item
Opção: @code{gnuplot_ps_term_command}

O comando gnuplot para escolher o tipo
de terminal para o terminal PostScript.  O valor padrão é 
@code{"set size 1.5, 1.5;set term postscript eps enhanced color solid 24"},
que escolhe o
tamanho para 1.5 vezes o padrão do gnuplot, e o tamanho da fonte para 24, além de
outras coisas.  Veja a documentação do gnuplot de @code{set term postscript} para mais informação.

Exemplo:

Todos os números nos exemplos para a função @var{plot2d} nesse
manual foram obtidos de arquivos Postscript que foram gerados após
escolher @code{gnuplot_ps_term_command} como:

@example
[gnuplot_ps_term_command,
"set size 1.3, 1.3; set term postscript eps color solid lw 2.5 30"]
@end example
@end itemize


@end defvr

@deffn {Função} plot3d ([@var{expr_1}, @var{expr_2}, @var{expr_3}], @var{x_range}, @var{y_range}, ..., @var{opções}, ...)
@deffnx {Função} plot3d (@var{expr}, @var{x_range}, @var{y_range}, ..., @var{opções}, ...)
@deffnx {Função} plot3d (@var{name}, @var{x_range}, @var{y_range}, ..., @var{opções}, ...)
@deffnx {Função} plot3d ([@var{expr_1}, @var{expr_2}, @var{expr_3}], @var{x_rge}, @var{y_rge})
@deffnx {Função} plot3d ([@var{nome_1}, @var{nome_2}, @var{nome_3}], @var{x_range}, @var{y_range}, ..., @var{opções}, ...)

Mostra um gráfico de uma ou três expressões como funções de duas variáveis.

@c ===beg===
@c plot3d (u^2 - v^2, [u, -2, 2], [v, -3, 3], [grid, 100, 100],
@c         [mesh_lines_color,false])$
@c ===end===
@example
@group
(%i1) plot3d (u^2 - v^2, [u, -2, 2], [v, -3, 3], [grid, 100, 100],
        [mesh_lines_color,false])$
@end group
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting17,8cm}
@end ifnotinfo

monta o gráfico de @code{u^2-v^2} com @code{u} e @code{v} variando no intervalo fechado [-2,2] e
no intervalo fechado de [-3,3] respectivamente, e com @var{u} sobre o eixo x, e @code{v} sobre o eixo
y.

Outro exemplo é uma superfície de Klein:

@c ===beg===
@c expr_1: 5*cos(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)-10$
@c expr_2: -5*sin(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)$
@c expr_3: 5*(-sin(x/2)*cos(y)+cos(x/2)*sin(2*y))$
@c plot3d ([expr_1, expr_2, expr_3], [x, -%pi, %pi],
@c         [y, -%pi, %pi], [grid, 50, 50])$
@c ===end===
@example
(%i1) expr_1: 5*cos(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)-10$
(%i2) expr_2: -5*sin(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3)$
(%i3) expr_3: 5*(-sin(x/2)*cos(y)+cos(x/2)*sin(2*y))$
@group
(%i4) plot3d ([expr_1, expr_2, expr_3], [x, -%pi, %pi],
        [y, -%pi, %pi], [grid, 50, 50])$
@end group
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting21,8cm}
@end ifnotinfo

Algumas vezes isso é necessário para definir uma função para montar o graico da expressão. Todos
os argumentos para plot3d são avaliados antes de serem passados para plot3d. Tentar
fazer um expressão que faz apenas o que é preciso pode ser 
difícil e pode ser mais fácil fazer uma função.   

@c ===beg===
@c M: matrix([1,2,3,4], [1,2,3,2], [1,2,3,4], [1,2,3,3])$
@c f(x, y) := float('M [round(x), round(y)])$
@c plot3d (f(x,y), [x,1,4],[y,1,4],[grid,3,3],[legend,false])$
@c ===end===
@example
(%i1) M: matrix([1,2,3,4], [1,2,3,2], [1,2,3,4], [1,2,3,3])$
(%i2) f(x, y) := float('M [round(x), round(y)])$
@group
(%i3) plot3d (f(x,y), [x,1,4],[y,1,4],[grid,3,3],[legend,false])$
@end group
@end example

@ifnotinfo
@image{@value{figuresfolder}/plotting25,8cm}
@end ifnotinfo

Veja @code{plot_options} para mais exemplos.

@end deffn

@deffn {Função}  make_transform (@var{vars}, @var{fx}, @var{fy}, @var{fz})
Retorna uma função adequada para a função transformação em plot3d.  Use
com a opção de montagem de gráfico @code{transform_xy}.
@example
make_transform ([r, th, z], r*cos(th), r*sin(th), z)$
@end example
é uma transformação para coordenadas polares.
@end deffn

@deffn {Função}  set_plot_option (@var{opção})
Atribui uma das varáveis globais para impressão.
@var{opção} é especificada como uma lista de dois ou mais elementos,
na qual o primeiro elemento é uma das palavras chave
dentro da lista @code{plot_options}.

@code{set_plot_option} avalia seu argumento e
retorna a liasta completa @code{plot_options}
(após modificar um de seus elementos).

Veja também @code{plot_options}, @code{plot2d}, e @code{plot3d}.

Exemplos:

Modifica a malha (@code{grid}) e valores de @code{x}.
Quando uma palavra chave em @code{plot_options} tem um valor atribuído,
colocar um apóstrofo evita avaliação.

@c ===beg===
@c set_plot_option ([grid, 30, 40]);
@c x: 42;
@c set_plot_option (['x, -100, 100]);
@c ===end===

@example
(%i1) set_plot_option ([grid, 30, 40]);
(%o1) [[x, - 1.755559702014E+305, 1.755559702014E+305], 
[y, - 1.755559702014E+305, 1.755559702014E+305], [t, - 3, 3], 
[grid, 30, 40], [transform_xy, false], [run_viewer, true], 
[plot_format, gnuplot], [gnuplot_term, default], 
[gnuplot_out_file, false], [nticks, 10], [adapt_depth, 10], 
[gnuplot_pm3d, false], [gnuplot_preamble, ], 
[gnuplot_curve_titles, [default]], 
[gnuplot_curve_styles, [with lines 3, with lines 1, 
with lines 2, with lines 5, with lines 4, with lines 6, 
with lines 7]], [gnuplot_default_term_command, ], 
[gnuplot_dumb_term_command, set term dumb 79 22], 
[gnuplot_ps_term_command, set size 1.5, 1.5;set term postscript #
eps enhanced color solid 24]]
(%i2) x: 42;
(%o2)                          42
(%i3) set_plot_option (['x, -100, 100]);
(%o3) [[x, - 100.0, 100.0], [y, - 1.755559702014E+305, 
1.755559702014E+305], [t, - 3, 3], [grid, 30, 40], 
[transform_xy, false], [run_viewer, true], 
[plot_format, gnuplot], [gnuplot_term, default], 
[gnuplot_out_file, false], [nticks, 10], [adapt_depth, 10], 
[gnuplot_pm3d, false], [gnuplot_preamble, ], 
[gnuplot_curve_titles, [default]], 
[gnuplot_curve_styles, [with lines 3, with lines 1, 
with lines 2, with lines 5, with lines 4, with lines 6, 
with lines 7]], [gnuplot_default_term_command, ], 
[gnuplot_dumb_term_command, set term dumb 79 22], 
[gnuplot_ps_term_command, set size 1.5, 1.5;set term postscript #
eps enhanced color solid 24]]
@end example

@end deffn

@subsection Funções para trabalhar com o formato @code{gnuplot_pipes}

@deffn {Função} gnuplot_start ()

Abre o pipe para o gnuplot usado para montar um gráfico com o formato
@code{gnuplot_pipes}. Não é necessário abrir manualmente o
pipe antes de montar o gráfico.

@end deffn

@deffn {Função} gnuplot_close ()

Fecha o pipe para o gnuplot que está sendo usado com o formato 
@code{gnuplot_pipes}.

@end deffn

@deffn {Função} gnuplot_restart ()

Fecha o pipe para o gnuplot que é usado com o formato 
@code{gnuplot_pipes} e abre um novo pipe.

@end deffn

@deffn {Função} gnuplot_replot ()
@deffnx {Função} gnuplot_replot (@var{s})

Atualiza a janela gráfica do gnuplot. Se @code{gnuplot_replot} for chamado com um
comando gnuplot em uma seq@"{u}ência de caracteres @var{s}, então @code{s} é enviado para o gnuplot
antes de atualizar a janela.

@end deffn

@deffn {Função} gnuplot_reset ()

Restaura o estado inicial padrão do gnuplot usado com o formato
@code{gnuplot_pipes}. Para atualizar a janela do gnuplot chama @code{gnuplot_replot} após
@code{gnuplot_reset}.

@end deffn


