{ "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", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\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", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\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", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\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 }