{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Criando gráficos em Julia\n",
"\n",
"Existem várias formas de criar gráficos em Julia.\n",
"Descrevemos a seguir como criar gráficos usando `Plots.jl`."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m registry at `~/.julia/registries/General.toml`\n",
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Project.toml`\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Manifest.toml`\n"
]
}
],
"source": [
"using Pkg\n",
"Pkg.add(\"Plots\") # Esse comando pode demorar da primeira vez..."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"using Plots # Esse comando pode demorar da primeira vez..."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Uma das vantagens de `Plots.jl` é que ele permite mudar de um backend para outro facilmente.\n",
"Neste notebook, vamos usar os backends `gr()` e `unicodeplots()`.\n",
"\n",
"Vamos fazer o gráfico de alguns pontos da função exponencial."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"x = [-2.1, -0.3, 1.2, 2.2, 2.9, 3.7, 4.5, 5.1];\n",
"y = exp.(x);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para fazer os gráficos, vamos carregar o backend GR:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Plots.GRBackend()"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gr()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Agora usamos os comandos `plot` e `scatter` para fazer os gráficos."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot(x, y, label=\"linha\")\n",
"scatter!(x, y, label=\"pontos\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A função `scatter!` (com `!` no final) é uma função mutante, e portanto ela irá modificar o gráfico que já existia.\n",
"Em contraste, execute o comando acima sem o ponto de exclamação `!` e veja o que ocorre.\n",
"\n",
"A seguir, adicionamos informações ao gráfico:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"xlabel!(\"x\")\n",
"ylabel!(\"y = exp(x)\")\n",
"title!(\"Alguns pontos do gráfico da função exponencial\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"O comando `xflip` modifica a orientação do eixo X."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"xflip!()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Agora, sem modificar a sintaxe, podemos criar o gráfico acima usando outro backend.\n",
"Por exemplo, vamos usar o backend `unicodeplots()`.\n",
"Primeiramente instalamos o pacote `UnicodePlots`."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Project.toml`\n",
"\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Manifest.toml`\n"
]
}
],
"source": [
"using Pkg\n",
"Pkg.add(\"UnicodePlots\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Em seguida, carregamos o backend `unicodeplots()` e executamos os mesmos comandos que usamos anteriormente:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Plots.UnicodePlotsBackend()"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"unicodeplots()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" Alguns pontos do gráfico da função seno \n",
" +----------------------------------------+ \n",
" 168.939 | | ⚬ | linha \n",
" | | . | pontos\n",
" | | ,` | \n",
" | | . | \n",
" | | ,` | \n",
" | | . | \n",
" | | ⚬` | \n",
" y = exp(x) | | ./ | \n",
" | | ./ | \n",
" | | ./ | \n",
" | | ./ | \n",
" | | .r⚬ | \n",
" | | .r' | \n",
" | | ._⚬r-\"⚬ | \n",
" -4.79453 |-⚬--------⚬-r-----⚬---------------------| \n",
" +----------------------------------------+ \n",
" -2.316 x 5.316 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot(x, y, label=\"linha\")\n",
"scatter!(x, y, label=\"pontos\")\n",
"xlabel!(\"x\")\n",
"ylabel!(\"y = exp(x)\")\n",
"title!(\"Alguns pontos do gráfico da função seno\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Como mencionamos, existem outros backends para criar gráficos.\n",
"Vimos apenas dois exemplos."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Uma boa continuação a este notebook é o tutorial https://docs.juliaplots.org/stable/tutorial/ em inglês (ou [traduzido para o português](https://docs-juliaplots-org.translate.goog/stable/tutorial/?_x_tr_sl=en&_x_tr_tl=pt&_x_tr_hl=en&_x_tr_pto=wapp))."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.8.2",
"language": "julia",
"name": "julia-1.8"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}