Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
M ´etodos Computacionais em F´ısica I
Sandra Amato
Instituto de F´ısica
Universidade Federal do Rio de Janeiro
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Matplotlib
Ü Gr ´aficos e animac¸ ˜oes s ˜ao ferramentas extremamente ´uteis
Ü Existem v ´arios pacotes de visualizac¸ ˜ao para o Python
Ü Usaremos neste curso o pacote mais b ´asico - Matplotlib
Ü Detalhes podem ser encontradosaqui (site oficial) Ü e nesselink: Problem Solving with Python (mais did ´atico)
Ü Criado pelo neurologista John D. Hunter no in´ıcio dos anos 2000.
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Gr ´aficos
Ü Suponha que queiramos fazer o gr ´afico da func¸ ˜ao f (x ) no intervalo a ≤ x ≤ b
Ü Os passos computacionais s ˜ao:
m criar uma lista (numpy.array) com os n valores de xi, em geral, igualmente espac¸ados de δx
xi =a + iδx , com δx = b − a n − 1 m calculamos os valores de yi =f (xi)para cada ponto i m colocamos esses pontos em um gr ´afico e ligamos os pontos
Ü J ´a trabalhamos com a classe array do pacote num ´erico NumPy
Ü V ´arias func¸ ˜oes do matplotlib utilizam func¸ ˜oes da NumPy
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Gr ´aficos no Matplotlib
ÜEx: Gr ´afico da func¸ ˜ao y = sin(x ) para x entre 0 e 4π espac¸ados de 0.1: plotSin0.py >>> import numpy as np >>> import matplotlib.pyplot as plt >>> #np.arange(start,stop,step) >>> x = np.arange(0, 4 * np.pi, 0.1) >>> y = np.sin(x) >>> plt.plot(x, y) >>> plt.show()
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Embelezando
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Embelezando
plotSin1.py import numpy as np import matplotlib.pyplot as plt #np.arange(start,stop,step) x = np.arange(0, 4 * np.pi, 0.1) y = np.sin(x)plt.plot(x, y, ’ro’) # r de red; o ´e um c´ırculo plt.xlabel(’angulo (0 a 4 pi)’)
plt.ylabel(’seno(x)’)
plt.title(’Grafico de seno(x)’)
plt.axhline(color=’gray’, y=0, zorder=-1) #y=0 ´e o default, pode ser omitido
# tire o parametro zorder=-1 e veja o que acontece
plt.savefig(’seno1.png’) # deve vir antes de plt.show() plt.show()
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Propriedades de Linhas
Argumentos que podem ser passados juntamente com a func¸ ˜ao plot
para controlar propriedades de linhas
Propriedade
Valores
alpha
transpar ˆencia (0–1)
color
Cor: b,g,r,c,m,y,k,w
label
legenda
linestyle
: .
-linewidth
Espessura da linha (pontos)
marker
+
o . s v x > <
markeredgewidth
Espessura da margem do s´ımbolo
markeredgecolor
Cor da margem do s´ımbolo
markerfacecolor
Cor do s´ımbolo
markersize
Tamanho do s´ımbolo (pontos)
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional) plotSin.py
x = np.arange(0, 4 * np.pi, 0.1) y = np.sin(x)
plt.plot(x, y, linewidth=2.0, linestyle=’--’,
color=’r’, marker=’o’, markersize=5, markeredgecolor=’b’, markerfacecolor=’g’, alpha=0.5) plt.xlabel(’angulo (0 a 4 pi)’) plt.ylabel(’seno(x)’) plt.title(’Grafico de seno(x)’) plt.grid(True) plt.xticks(
np.arange(0, 4*np.pi + np.pi/2, np.pi/2), [’0’,’pi/2’,’pi’,’3pi/2’,’2pi’,’5pi/2’, ’3pi’,’7pi/2’,’4pi’])
plt.yticks()
plt.savefig(’seno.png’) # deve vir antes de plt.show() plt.show()
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Ex. de Duas Curvas no mesmo gr ´afico e aproveitando pra definir a func¸ ˜ao com def import numpy as np import matplotlib.pyplot as plt def f1(t): return t**2*np.exp(-t**2) def f2(t): return t**2*f1(t) t = np.linspace(0, 3, 51) y1 = f1(t) y2 = f2(t) plt.plot(t, y1, ’r-’) plt.plot(t, y2, ’bo’) plt.xlabel(’t [s]’) plt.ylabel(’y [m]’) plt.legend([’tˆ2*exp(-tˆ2)’,\ ’tˆ4*exp(-tˆ2)’]) plt.title(’Duas curvas’) plt.savefig(’duasCurvas.pdf’) plt.show() 0.0 0.5 1.0 1.5 2.0 2.5 3.0 t [s] 0.0 0.1 0.2 0.3 0.4 0.5 y [m] Duas curvas t^2*exp(-t^2) t^4*exp(-t^2)
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Gr ´afico de pontos com incertezas
Crie o arquivo plotPontos.py com os seguintes comandos import matplotlib.pyplot as plt
x = [0, 2, 4, 6] y = [1, 3, 4, 8]
plt.errorbar(x, y, yerr=0.2) #... e com incertezas plt.xlabel(’x’)
plt.ylabel(’y’)
plt.title(’Grafico com barra de erro’)
plt.legend([’resultado 1’],loc=0) #melhor local plt.show()
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Propriedades de Texto
Argumentos opcionais dos comandos de texto
Propriedade
Valores
alpha
transpar ˆencia (0–1)
color
Cor: b,g,r,c,m,y,k,w
fontangle
italic, normal, oblique
fontname
Nome da fonte
fontsize
Tamanho da fonte
fontweight
normal, bold, light4
horizontalalingnment
left, center, right
verticalalingnment
bottom, center, top
rotation
horizontal, vertical
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Incompatibilidade entre fontes no Windows
Pode haver uma incompatibilidade entre a biblioteca matplotlib e o
sistema operacional Windows ao salvar as imagens em .pdf, pois a
fonte de texto original da biblioteca n ˜ao vem instalada por padr ˜ao no
Windows. Para contornar isso, basta mudarmos a fonte de texto a ser
utilizada. Escreva essas duas linhas de comando antes de comec¸ar a
montar seu plot:
plt.rcParams[’pdf.fonttype’] = 42
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Embelezando
import matplotlib.pyplot as plt x = [0, 2, 4, 6] y = [1, 3, 4, 8] plt.xlim(left=-1,right=8)plt.errorbar(x, y, yerr=0.2, fmt=’o’) plt.xlabel(’x’,fontsize=20)
plt.ylabel(’Voltagem [$\mu$V]’, color=’r’) plt.title(’Grafico com barra de erro’)
plt.text(5,2,’$\sum_iˆ\infty x_i$’,fontsize=20) plt.legend([’resultado 1’],loc=’upper left’)
plt.savefig(’pontos.pdf’) plt.show()
Para ver as possibilidades: >>> help(plt.plot) >>> help(plt.legend) 1 0 1 2 3 4 5 6 7 8 x 1 2 3 4 5 6 7 8 Vo lta ge m [ V] ixi
Grafico com barra de erro
resultado 1
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
S ´erie de Taylor
Ü S ´erie de Taylor ´e uma das ferramentas matem ´aticas mais importantes em m ´etodos num ´ericos e computac¸ ˜ao cient´ıfica
Ü Ela ´e usada para desenvolver os m ´etodos que veremos neste curso m M ´etodo de Newton para encontrar a raiz de uma func¸ ˜ao m M ´etodo dos Trap ´ezios e de Simpson para calcular integrais m M ´etodos de Euler e Runge-Kutta pra EDO
Ü e nos permite uma an ´alise da acur ´acia que o m ´etodo prov ˆe
Ü Suponha conhecido o valor da func¸ ˜ao f em um ponto x0e queremos saber o valor de f em ponto pr ´oximo x = x0+h, com h sendo bem pequeno. Suponha que saibamos tamb ´em a derivada de f no mesmo ponto x0. Uma primeira aproximac¸ ˜ao pode ser escrita como:
f0(x0) ≈
f (x0+h)− f (x0)
h ⇒ f (x0+h) ≈ f (x0) +h f 0(x
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
S ´eries de Taylor
Se uma func¸ ˜ao f (x ) ´e diferenci ´avel n vezes no intervalo (a, b) : podemos escrev ˆe-la como: aS ´erie de Taylor:
f (x ) = f (x0) +f1(x0)(x − x0) +2!1f 2 (x0)(x − x0)2+ · · · +n!1f n (x0)(x − x0)n+ . . . f (x ) = ∞ X n=0 1 n! dnf dxn(x0)(x − x0) n fn(x
0) ´e sua n- ´esima derivada calculada no ponto x0∈ (a, b)
A contribuic¸ ˜ao relativa de cada termo cai com n (∝ 1/n!)
Se truncarmos a s ´erie no termo de ordem n, a soma ser ´a uma aproximac¸ ˜ao Quanto maior o n, melhor a aproximac¸ ˜ao
A soma dos termosdesprezadosser ´a dominada pelo termo de ordem n + 1 Ao truncar a s ´erie de Taylor no termo de ordemnteremos umerrona aproximac¸ ˜ao proporcional ao pr ´oximo termo, ou seja,δf = O(x − x0)(n+1),
o erro depende de h = x − x0e do n ´umero de termos n
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
S ´eries de Taylor - Exemplos
f (x ) = f (x0)+f1(x0)(x −x0)+2!1f2(x0)(x −x0)2+· · ·+n!1fn(x0)(x −x0)n+. . . f (x ) = ex, em torno de x0=0: f1(x ) = ex → f1(0) = 1, f2(x ) = ex → f2(0) = 1, . . . ex =1 + x +12x2+3!1x3+ · · · + n!1xn+ . . . n = 1, 2, 3, . . . f (x ) = sin(x ), em torno de x0=0: f1(x ) = cos(x ) → f1(0) = 1, f2(x ) = − sin(x ) → f2(0) = 0, f3(x ) = −cos(x ) → f3(0) = −1, f4(x ) = sin(x ) → f4(0) = 0, . . . sin(x ) = x − 3!1x3+5!1x5− 1 7!x 7. . . sin(x ) = ∞ X i=0 (−1)n(x − x0) 2n+1 (2n + 1)!
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
S ´erie de Taylor de e
xÜUm programa extremamente simples e n ˜ao muito funcional para calcular alguns poucos termos da s ´erie de Taylor da func¸ ˜ao exponencial poderia ser (exp taylor simples.py)
from math import exp
h = float(input(’Digite o valor de (h)\n’)) print (’exp(%f) = %f’ %(h, exp(h)))
soma = 1. ordem = 0
print (’ordem=%d, serie=%g, erro=%g’ %(ordem,soma,exp(h)-soma)) ordem = 1
soma += h
print (’ordem=%d, serie=%g, erro=%g’ %(ordem,soma,exp(h)-soma)) ordem = 2
soma += (1/2.0)*h**2
print (’ordem=%d, serie=%g, erro=%g’ %(ordem,soma,exp(h)-soma)) ordem = 3
soma += (1/6.0)*h**3
print (’ordem=%d, serie=%g, erro=%g’ %(ordem,soma,exp(h)-soma)) ordem = 4
soma += (1/24.0)*h**4
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
S ´erie de Taylor de e
x $ python3 exp_taylor_simples.py Digite o valor de (h) .2 exp(0.200000) = 1.221403ordem=0, serie = 1, erro = 0.221403 ordem=1, serie = 1.2, erro = 0.0214028 ordem=2, serie = 1.22, erro = 0.00140276 ordem=3, serie = 1.22133, erro = 6.94248e-05 ordem=4, serie = 1.2214, erro = 2.75816e-06
$ python3 exp_taylor_simples.py Digite o valor de (h)
3
exp(3.000000) = 20.085537
ordem=0, serie = 1, erro = 19.0855 ordem=1, serie = 4, erro = 16.0855 ordem=2, serie = 8.5, erro = 11.5855 ordem=3, serie = 13, erro = 7.08554 ordem=4, serie = 16.375, erro = 3.71054
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
S ´erie de Taylor de e
xÜ Neste exemplo, truncamos a s ´erie de Taylor em n = 4, portanto, para a exponencial, esperamos um erro da ordem de
δf ≈ (x − x0)(n+1)/(n + 1)!
Ü Para x − x0=0.2 o erro foi 2.75816e-06 e o valor esperado ´e δf = 0.25/5! = 2.666 × 10−6
Ü Para x − x0=3 o erro foi 3.71054 e o valor esperado ´e δf = 35/5! = 2.025
Ü Mas podemos ir adicionando quantos termos quisermos at ´e atingir a acur ´acia desejada. Para x − x0=3, obtemos o valor de 20.086 com 15 termos da s ´erie.
Ü Para x − x0=50, e50=5.1847 × 1021e variando o n ´umero de termos: n+1 s ´erie 2 51 4 2.2134 ×104 8 1.7960 ×108 16 3.2964 ×1013 32 1.3928 ×1019 64 5.0196 ×1021 128 5.1847 ×1021
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Exerc´ıcio
Ü Vamos analisar a func¸ ˜ao sin(x ) em torno de x0=0: sin(x ) = x − 1 3!x 3+ 1 5!x 5− 1 7!x 7· · · = ∞ X i=0 (−1)n (x ) 2n+1 (2n + 1)!
Ü Voc ˆe vai produzir o gr ´afico
0 50 100 150 200 250 x(graus) 2.0 1.5 1.0 0.5 0.0 0.5 1.0 1.5 2.0 sen(x)
Serie de Taylor - sen(x)
sen(x) N=3 N=5 N=7 N=9
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü
Histogramas s ˜ao usados para visualizar e analisar dados
distribu´ıdos em determinadas categorias ou em intervalos de uma
dada vari ´avel. Permitem que se perceba o valor central (m ´edia), a
faixa de variac¸ ˜ao (desvio padr ˜ao), poss´ıveis estruturas e eventos
inesperados.
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü
Para construir um histograma classificamos os dados de acordo
com os intervalos
, calculando o n ´umero N(x
i)
ou a frequ ˆencia
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü
Para construir um histograma classificamos os dados de acordo
com os intervalos,
calculando o n ´umero N(x
i)
ou a frequ ˆencia
F (x
i) =
N(x
i)/N de ocorr ˆencia em cada intervalo.
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü
Quando queremos fazer um histograma de uma vari ´avel real,
definimos uma largura do intervalo (
bin
), ∆x .
As quantidades N(x
i)
v ˜ao representar o n ´umero de ocorr ˆencias
entre x
ie x
i+ ∆x .
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü
Quando queremos fazer um histograma de uma vari ´avel real,
definimos uma largura do intervalo (
bin
), ∆x .
As quantidades N(x
i)
v ˜ao representar o n ´umero de ocorr ˆencias
entre x
ie x
i+ ∆x .
N(x
i)depende da escolha da largura ∆x .
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü
Quando queremos fazer um histograma de uma vari ´avel real,
definimos uma largura do intervalo (
bin
), ∆x .
As quantidades N(x
i)
v ˜ao representar o n ´umero de ocorr ˆencias
entre x
ie x
i+ ∆x .
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
bin xi +∆x Cont 1 9.00 9.08 0 2 9.08 9.16 0 3 9.16 9.24 2 4 9.24 9.32 0 5 9.32 9.40 1 6 9.40 9.48 4 7 9.48 9.56 8 8 9.56 9.64 19 9 9.64 9.72 20 10 9.72 9.80 35 11 9.80 9.88 32 12 9.88 9.96 33 13 9.96 10.04 23 14 10.04 10.12 10 15 10.12 10.20 9 16 10.20 10.28 7 17 10.28 10.36 4 18 10.36 10.44 1 19 10.44 10.52 0 20 10.52 10.60 0Observe que, para melhor visualizac¸ ˜ao, o gr ´afico cobre uma faixa um pouco maior que a faixa de valores de x
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
bin xi +∆x Cont 1 9.00 9.08 0 2 9.08 9.16 0 3 9.16 9.24 2 4 9.24 9.32 0 5 9.32 9.40 1 6 9.40 9.48 4 7 9.48 9.56 8 8 9.56 9.64 19 9 9.64 9.72 20 10 9.72 9.80 35 11 9.80 9.88 32 12 9.88 9.96 33 13 9.96 10.04 23 14 10.04 10.12 10 15 10.12 10.20 9 16 10.20 10.28 7 17 10.28 10.36 4 18 10.36 10.44 1 19 10.44 10.52 0 20 10.52 10.60 0Observe que, para melhor visualizac¸ ˜ao, o gr ´afico cobre uma faixa um pouco maior que a faixa de valores de x
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü Atenc¸ ˜ao:
A escolha da largura dos intervalos pode distorcer o
comportamento dos dados que estamos analisando.
20 bins
bins
Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü Atenc¸ ˜ao:
A escolha da largura dos intervalos pode distorcer o
comportamento dos dados que estamos analisando.
20 bins
4 bins
Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü Atenc¸ ˜ao:
A escolha da largura dos intervalos pode distorcer o
comportamento dos dados que estamos analisando.
20 bins
200 bins
Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü Atenc¸ ˜ao:
A escolha da largura dos intervalos pode distorcer o
comportamento dos dados que estamos analisando.
20 bins
500 bins
Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histogramas
Ü Atenc¸ ˜ao:
A escolha da largura dos intervalos pode distorcer o
comportamento dos dados que estamos analisando.
20 bins
500 bins
Tem que haver um compromisso entre o n ´umero de bins e o n ´umero de eventos em cada bin
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Determinac¸ ˜ao do bin a que pertence um certo valor
De forma intuitiva:
Percorra os intervalos e veja se xi−1<valor <= xi
Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:
min = 1.5 max = 2.0 Nbins = 5: ´ındice pode ser i=0,1,2,3,4 Dado um valor , ´ındice i = ?
Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Determinac¸ ˜ao do bin a que pertence um certo valor
De forma intuitiva:
Percorra os intervalos e veja se xi−1<valor <= xi
Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:
min = 1.5 max = 2.0 Nbins = 5
: ´ındice pode ser i=0,1,2,3,4 Dado um valor , ´ındice i = ?
Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4
Dica: dx = max −minNbins = 0.5/5 = 0.1
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Determinac¸ ˜ao do bin a que pertence um certo valor
De forma intuitiva:
Percorra os intervalos e veja se xi−1<valor <= xi
Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:
min = 1.5 max = 2.0 Nbins = 5: ´ındice pode ser i=0,1,2,3,4
Dado um valor , ´ındice i = ? Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Determinac¸ ˜ao do bin a que pertence um certo valor
De forma intuitiva:
Percorra os intervalos e veja se xi−1<valor <= xi
Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:
min = 1.5 max = 2.0 Nbins = 5: ´ındice pode ser i=0,1,2,3,4 Dado um valor , ´ındice i = ?
Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4
Dica: dx = max −minNbins = 0.5/5 = 0.1
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Determinac¸ ˜ao do bin a que pertence um certo valor
De forma intuitiva:
Percorra os intervalos e veja se xi−1<valor <= xi
Podemos obter uma forma direta para sabermos a que bin um certo valor pertence:
min = 1.5 max = 2.0 Nbins = 5: ´ındice pode ser i=0,1,2,3,4 Dado um valor , ´ındice i = ?
Ex: se valor = 1.52 ⇒ i = 0 se valor = 1.91 ⇒ i = 4
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Exerc´ıcio - Preparac¸ ˜ao de um histograma
ÜSuponha que voc ˆe tenha uma lista de valores para fazer um histograma.
ÜPara isso voc ˆe deve dividir o intervalo dos valores em sub-intervalos iguais
e contar quantos valores est ˜ao dentro de cada um desses sub-intervalos.
ÜEscreva um algoritmo para realizar essa operac¸ ˜ao.
ÜObserve o conte ´udo do arquivo gravidade.dat que cont ´em medic¸ ˜oes
da acelerac¸ ˜ao da gravidade feita por alunos na FisexpI. Os dados contidos
nesse arquivo variam entre 975.0 e 995.0 cm/s2.
ÜEscreva um programa em Python (histogramaRaiz.py) que:
1 Leia do teclado os limites do histograma e o n ´umero de bins. 2 Leia os valores do arquivo gravidade.dat
3 determine a que bin cada valor ser ´a atribu´ıdo 4 Conte quantos valores caem em cada intervalo
5 Fac¸a o gr ´afico de y × x onde x s ˜ao os valores da acelerac¸ ˜ao da
gravidade e y ´e o n ´umero de ocorr ˆencias de medidas em cada bin
Rode o programa com 20 e 60 bins
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histograma da numpy
Ü Felizmente n ˜ao precisamos fazer toda essa manipulac¸ ˜ao para trabalharmos com histograma no Python.
Ü A func¸ ˜ao numpy.histogram() j ´a faz tudo automaticamente:
Ü ela recebe dois argumentos como input: um array com os valores a serem considerados para o histograma, e uma lista com os limites dos bins
Ü e retorna duas listas, a contagem de cada bin, e a pr ´opria lista com os limites dos bins
a=np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27]) hist,bins = np.histogram(a,bins = [0,20,40,60,80,100]) print (hist)
print (bins)
O resultado ser ´a: [3 4 5 2 1]
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Histograma em Matplotlib
Ü O m ´odulo matplotlib.pyplot nos fornece o m ´etodo plt.hist(valores, bins=20) ou
plt.hist(valores, bins=20, density=True)
Ü que plota o histograma dos valores contidos no array valores. Quando o argumento density for setado para True o histograma ´e normalizado.
Ü Fac¸a o exerc´ıcio de histograma da lista das Tarefas
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Relembrando... Pacote Numpy
Numpy
E o pacote do Python mais fundamental para computac¸ ˜ao
´
cient´ıfica.
Ele cont ´em, entre outras coisas:
Ü
arrays e matrizes
Ü
func¸ ˜oes matem ´aticas sofisticadas
Ü
ferramentas de ´algebra linear
Ü
transformada de Fourier
Ü
geradores de n ´umeros aleat ´orios
Ü
ferramentas para integrar Python com C/C++ e Fortran
Voc ˆe pode encontrar um tutorial no pr ´opriosite da Numpy, ouaqui... existem v ´arios.
Existe uma quantidade enorme de m ´etodos j ´a prontos na numpy, cobriremos apenas alguns deles aqui.
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Array
Ü
J ´a vimos o container Array, definido no m ´odulo numpy:
m
´e muito mais r ´apido que List, especialmente se contiver
muitos n ´umeros
m
j ´a tem os m ´etodos matem ´aticos, como se fossem aplicados a
vetores, p. ex. soma de dois arrays, produto escalar, etc.
Assim n ˜ao ´e necess ´ario fazer loops sobre os elementos
m
pode ser bi-dimensional,
para aplicac¸ ˜oes com matrizes
m
usado no m ´odulo de visualizac¸ ˜ao de gr ´aficos matplotlib
Ü
Atenc¸ ˜ao:
m
todos os elementos devem ser do mesmo tipo (float, int ...)
m
o n ´umero de elementos deve ser conhecido na criac¸ ˜ao, n ˜ao pode
ser modificado posteriormente
m
detalhes no
site do SciPy
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Inicializac¸ ˜ao de um Array
Podemos inicializar um array de v ´arias formas
>>> import numpy as np #ser´a omitido nos pr´oximos slides >>> a = np.zeros(4) # cria array com 4 el. com 0. (float) >>> print (a)
[0. 0. 0. 0.] # repare que ´e sem v´ırgula >>> b = np.ones(5) # (omitindo os comandos print)) [1. 1. 1. 1. 1.]
>>> c= 6*np.ones(4) [6. 6. 6. 6.]
>>> alist = [1., 1.5, -2.2] # uma lista
>>> aarray = np.array(alist) # pode ser convertida em array >>> aarray = np.array([5, 10, 15], float)
array([ 5., 10., 15.])
>>> s = np.linspace(0, 2, 3) # (in´ıcio, fim, num. elem) array([0., 1., 2.]) # inclui o ´ultimo. sempre float >>> s = np.arange(1, 8, 2) # (in´ıcio, fim, passo) array([1, 3, 5, 7]) # n˜ao inclui o ´ultimo.
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Inic. de um Array c/ valores lidos de arquivo
Ü Uma outra forma de criar um array ´e atrav ´es da leitura dos valoresarmazenados em um arquivo
Ü Bastante ´util para ler dados obtidos em um experimento, ou gerados por outro programa
Ü Suponha um arquivo valores.txt com o seguinte conte ´udo: Um cabec¸alho
Um t´ıtulo 1.0
1.5 -2.2
Para l ˆe-los em um array, pulando as duas primeiras linhas: >>> a = np.loadtxt ("valores.txt", skiprows=2) >>> print (a)
[ 1. 1.5 -2.2]
ÜRepare que n ˜ao ´e preciso saber o n ´umero de linhas do arquivo
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Operac¸ ˜
oes com np.arrays
Ü Em geral as operac¸ ˜oes com np.arrays s ˜ao realizadas elemento a elemento e retornam um outro np.array
>>> b = np.arange(3) >>> print (b) [0 1 2] >>> print (np.sqrt(b)) [0. 1. 1.41421356] >>> c = np.array([2., -1., 4.]) >>> print (b * c) [ 0. -1. 8.] >>> print (b<2) [ True True False]
Ü numpyfornece uma grande quantidade de func¸ ˜oes universais (sin, cos, exp,...) e v ´arios m ´etodos prontos. Vejaaquiuma lista deles
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Formatac¸ ˜ao de np.arrays
Ü Vemos que os valores do tipo float s ˜ao apresentados com 8 casas decimais, ocupando 10 colunas. Podemos controlar a precis ˜ao usando o m ´etodo set printoptions()(omitindo o comando print(a))
Ü para controlar o n ´umero de casas decimais: a = np.linspace(1, 1.5, 4)
[1. 1.16666667 1.33333333 1.5 ]
>>> np.set_printoptions(precision=2) [1. 1.17 1.33 1.5 ]
Ü para escrever em notac¸ ˜ao cient´ıfica ou controlar tamb ´em o n ´umero de colunas ocupadas (relembre a func¸ ˜ao lambdaaqui):
>>> np.set_printoptions(
... formatter={’float’: lambda x: format(x, ’5.1e’)}) [1.0e+00 1.2e+00 1.3e+00 1.5e+00]
>>> np.set_printoptions(
... formatter={’float’: lambda x: format(x, ’6.3f’)}) [ 1.000 1.167 1.333 1.500]
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Slices
Ü Slice se refere `a uma parte de uma lista ou array
Ü Para extrair uma parte de um array, usamos a sintaxe: A[i:j]. Ser ´a extra´ıda uma sublista que comec¸a com o elemento A[i] e termina com o elemento A[j-1]
>>> a = np.array([2,4,6,8,10,12,14,16],int) >>> b=a[3:6] [ 8 10 12] >>> c= a[3:] >>> print (c) [ 8 10 12 14 16] >>> d = a[:3] >>> print (d) [2 4 6] >>> r = a[1:-1] >>> print (r) [ 4 6 8 10 12 14]
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Matrizes
Ü
Matriz ´e um conjunto de n ´umeros organizado em forma de tabela,
com algumas propriedades matem ´aticas. S ˜ao muito utilizadas em
´algebra linear e Mec ˆanica Qu ˆantica
Ü
A matriz A
A =
A
11A
12A
13A
14A
21A
22A
23A
24A
31A
32A
33A
34
=
0
12
−1 5
−1 −1 −1 0
11
5
5
2
´e uma matriz com 3 linhas e 4 colunas, chamada matriz 3×4
Ü
O elemento A
ijse refere ao n ´umero que est ´a na linha i coluna j
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Matriz em Python
Ü Em Python, uma matriz ´e representada por um array de 2 dimens ˜oes
Ü Algumas maneiras de criar um array de duas dimens ˜oes, p. ex. 3 × 2 m criando todos os elementos com zeros
>>> a = np.zeros([3,2]) >>> print (a) [[0. 0.] [0. 0.] [0. 0.]] m ... ou vazios
>>> b = np.empty([3,2]) #cont´em algum lixo na mem´oria [[0. 0.]
[1. 0.] [0. 12.345]]
m ou uma matriz diagonal:
>>> A = np.diag(np.array([1,2,3,4]))ou >>> A = np.diag(np.arange(1,5))
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Matriz em Python
Ü Algumas maneiras de criar um array de duas dimens ˜oes (cont.) m ... ou com todos os elementos iguais
>>> b=5*np.ones((3,4)) [[5. 5. 5. 5.]
[5. 5. 5. 5.] [5. 5. 5. 5.]]
m Podemos tamb ´em gerar uma matriz diagonal 2 x 2 com inteiros: >>> d=np.eye(2,dtype=int)
[[1, 0] [0, 1]]
m usando uma lista de listas (Tem que ter mesmo n ´umero de colunas para cada linha)
>>> r = np.array([[1, 2],[3, 4],[10, 11]], int) [[ 1 2]
[ 3 4] [10, 11]]
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Matriz em Python
Ü Para acessar um elemento da matriz (lembre: ´ındice comec¸a de zero): >>> print (r[0,1]) 2 >>> r[1,1] = 5 >>> print (r) [[ 1 2] [ 3 5] [10 11]] >>> print(r[2,1]*r[1,1]) 55 >>> print (r[1,2])
Traceback (most recent call last): File "<stdin>", line 1, in <module>
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Matriz em Python
>>> print (r) [[ 1 2] [ 3 5] [10 11]]Ü Podemos acessar ou alterar uma linha inteira de uma s ´o vez: >>> print(r[1]) [3 5] >>> r[2]=np.array([7, 9]) >>> r array([[1, 2], [3, 5], [7, 9]]) Ü Visualizando a Transposta: >>> print (r.T) [[1 3 7] [2 5 9]]
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Shape
Ü Para saber o layout da matriz:
>>> r = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9], [10, 11, 12]], int) >>> r.shape (4, 3) >>> r.shape[0] 4 >>> r.shape[1] 3 >>> r.ndim 2 >>> r.size 12 >>> len(r) 4 >>> r.reshape(2,6) array([[ 1, 2, 3, 4, 5, 6], [ 7, 8, 9, 10, 11, 12]])
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Shape
Ü Um loop sobre todos os elem. da matriz pode ser feito com dois loops: >>> for i in range(r.shape[0]): ... for j in range(r.shape[1]): ... r[i,j] += 1 ... >>> print (r) [[ 2 3 4] [ 5 6 7] [ 8 9 10] [11 12 13]]
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Matrizes - Operac¸ ˜
oes
>>> b=np.array([[3,5],[2,7]]) array([[3, 5],
[2, 7]])
>>> c=1/b # Note que isso n˜ao ´e o inverso da matriz!
array([[0.33333333, 0.2 ], [0.5 , 0.14285714]]) >>> d=b**2 array([[ 9, 25], [ 4, 49]]) >>> e=2**b array([[ 8, 32], [ 4, 128]]) >>> f=-(0.5*b + 1) array([[-2.5, -3.5], [-2. , -4.5]]) >>> b += b.T array([[ 6, 7], [ 7, 14]])
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Slices
Ü
Podemos tamb ´em extrair partes da matriz, assim como foi feito com
array de uma dimens ˜ao:
>>> r = np.array([[2,3],[4,6],[11,10]])
#Extrair primeira coluna:
# 0:3 (todas as linhas)
0 (primeira coluna)
>>> print(r[0:3, 0])
#ou
>>> print(r[0:r.shape[0], 0])
#ou
>>> print(r[:, 0])
[ 2
4 11]
#extrair a segunda linha:
>>> print(r[1, :])
[4 6]
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Inicializac¸ ˜ao de array 2D com leitura de arquivo
Ünumpyoferece um grande n ´umero de operac¸ ˜oes com matrizesÜmas podemos us ´a-las simplesmente para ler os dados de um arquivo que est ˜ao organizados em forma de tabela:
m Dado um arquivo dados.txt com os valores abaixo: 0.5 3.7 2.1 7.0
2.3 2.9 5.4 3.1
m Voc ˆe pode l ˆe-lo para uma matriz:
>>> dados=np.loadtxt("dados.txt") array([[ 0.5, 3.7, 2.1, 7. ],
[ 2.3, 2.9, 5.4, 3.1]])
m Voc ˆe pode utilizar s ´o algumas colunas usando slices
m ou ler s ´o algumas colunas diretamente do arquivo para uma matriz: >>> dados2=np.loadtxt("dados.txt",usecols=(0, 2)) array([[ 0.5, 2.1],
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Inicializac¸ ˜ao de array 2D com leitura de arquivo
m ou ler cada coluna diretamente para arrays de uma dimens ˜ao, usando aopc¸ ˜ao unpack=True
>>> a, b,c = np.loadtxt("dados.txt",usecols=(0, 2,3),\ unpack=True) >>> a array([0.5, 2.3]) >>> b array([2.1, 5.4]) >>> c array([7. , 3.1])
m Fac¸a o exerc´ıcio sobre a densidade da ´agua da lista de Tarefas
m Fac¸a um programa que dadas duas matrizes A e B n × n, calcule o produto dessas duas matrizes. Compare com o obtido pelo m ´etodo np.dot(A,B)
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Indexac¸ ˜ao sofisticada: M ´ascara booleana
m ´Indice como M´ascara booleana ´e uma ferramenta muito poderosa e ´util
para acessar v ´arios elementos de um np.array. Vamos usar array de uma dimens ˜ao para simplificar.
>>> b = 1.0/np.arange(0.2, 3, 0.2)
[5. 2.5 1.66666 1.25 1. 0.83333
0.71428 0.625 0.55555 0.5 0.45454 0.41666
0.38461 0.35714]
m Queremos imprimir apenas os elementos que sejam > 1 (repare que o array b n ˜ao foi modificado:
>>> print(b[b > 1])
[5. 2.5 1.66666667 1.25 ]
m ´util para alterar valores que atendam a um crit ´erio:
>>> b[b > 1] = 1 >>> print(b)
[1. 1. 1. 1. 1. 0.83333
0.71428 0.625 0.55555 0.5 0.45454 0.41666
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Indexac¸ ˜ao sofisticada: M ´ascara booleana
m Vamos criar um outro array com o mesmo tamanho de b (b.size ´e 14):
>>> c = np.linspace(0, 10, b.size)
[ 0. 0.76923 1.53846 2.30769 3.07692 3.84615
4.61538 5.38461 6.15384 6.92307 7.69230 8.46153
9.23076 10. ]
m e queremos que os elementos de c sejam 3 onde os elementos de b s ˜ao 1:
>>> c[b == 1] = 3
[ 3. 3. 3. 3. 3. 3.84615
4.61538 5.38461 6.15384 6.92307 7.69230 8.46153
9.23076 10. ]
uma condic¸ ˜ao booleana (b==1) sobre um array pode ser usada para indexar um outro array, desde que eles sejam do mesmo tamanho.
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Indexac¸ ˜ao sofisticada: M ´ascara booleana
m mais um exemplo: extrair n ´umeros pares de uma lista
>>> a=np.array([17, 2, 2, 1, 19, 5, 8, 14, 1, 10]) >>> print(a[a%2 ==0])
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
SciPy
m
SciPy
´e um pacote que cont ´em v ´arias ferramentas de
computac¸ ˜ao cient´ıfica. ´
E composto de subm ´odulos que
correspondem `a diferentes aplicac¸ ˜oes:
1
Algebra linear: scipy.linalg
´
2
estat´ıtica e n ´umeros aleat ´orios: scipy.stats
3integrac¸ ˜ao num ´erica: scipy.integrate
4otimizac ˜ao e fit: scipy.optimize
5func¸ ˜oes especiais: scipy.special
6file input/output: scipy.io
7
processamento de imagem: scipy.ndimage
8transformada de Fourier: scipy.fftpack
9processamento de sinal: scipy.signal
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
´
Algebra Linear
m O pacote para ´algebra linear ´e oscipy.linalg m determinante de uma matriz:
>>> import scipy.linalg
>>> a = np.array([[-2, 3], [4, 5]]) >>> scipy.linalg.det(a)
-22.0
m Inversa de uma matriz:
>>> b = scipy.linalg.inv(a) [[-0.22727273 0.13636364]
[ 0.18181818 0.09090909]]
m Verifique que A × A−1=I: >>> c=np.dot(a,b)
array([[ 1.00000000e+00, 2.77555756e-17], [-5.55111512e-17, 1.00000000e+00]]) >>> c[np.abs(c) < 1.e-10] = 0
array([[1., 0.], [0., 1.]])
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Soluc¸ ˜ao sistemas de equac¸ ˜
oes lineares
m Para resolver sistemas de equac¸ ˜oes lineares basta criar uma matriz de coeficientes e um vetor coluna (array 1D)
2x1+4x2+6x3 = 4 x1− 3x2− 9x3 = −11 8x1+5x2− 7x3 = 1
m Queremos encontrar o vetor ~x tal que A~x = ~b A = 2 4 6 1 −3 −9 8 5 −7 , ~x = x1 x2 x3 , ~b = 4 −11 1 >>> A = np.array([[2, 4, 6], [1, -3, -9], [8, 5, -7]]) >>> b = np.array([4, -11, 2]) >>> x = scipy.linalg.solve(A, b) >>> print (x) [-8.91304348 10.2173913 -3.17391304]
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Autovalores e autovetores
m O m ´odulo scipy.linalg fornece o m ´etodo eig para achar os autovalores λ associados `a matriz A: A~x = λ~x .
m essa func ˜ao retorna um array, cujos elementos s ˜ao os autovalores e uma matriz cujas linhas s ˜ao os autovetores
>>> A = np.array([[2, 4, 6], [1, -3, -9], [8, 5, -7]]) >>> lam, evec = scipy.linalg.eig(A)
>>> lam array([ 2.40995356+0.j, -8.03416016+0.j, -2.3757934 +0.j]) >>> evec array([[-0.77167559, -0.52633654, 0.57513303], [ 0.50360249, 0.76565448, -0.80920669], [-0.38846018, 0.36978786, 0.12002724]])
m o primeiro autovalor e seu correspondente autovetor s ˜ao : >>> lam[0]
(2.4099535647625494+0j) >>> evec[:,0]
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
m
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
m
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Interface orientada a objeto (Opcional)
Ü
Vimos alguns tipos de gr ´aficos:
m
plot(x,y)
– gr ´afico de linha ou pontos
m
errorbar(x, y, xerr = , yerr = )
– com barra de erro
m
scatter(x , y)
– gr ´afico de pontos
(esse n ˜ao vimos, pesquise!)m
hist(dados, n bins)
– histograma
Ü
Vimos o m ´etodo mais simples e direto, exemplo
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
plotSin-simples.py
import numpy as np import matplotlib.pyplot as plt #np.arange(start,stop,step) x = np.arange(0, 4 * np.pi, 0.1) y = np.sin(x)plt.plot(x, y, linewidth=2.0, linestyle=’--’, color=’r’, marker=’o’, markersize=5, markeredgecolor=’b’, markerfacecolor=’g’) plt.xlabel(’angulo (0 a 4 pi)’)
plt.ylabel(’seno(x)’)
plt.title(’Grafico de seno(x)’) plt.show()
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Interface orientada a objeto
Ü Existe uma outra forma de fazer os gr ´aficos, ligeiramente diferente, chamada de Interface Orientada a Objeto
Ü Nessa interface, as componentes do gr ´afico (eixos, t´ıtulo, linhas, pontos, labels dos ticks, etc.) s ˜ao tratados como objetos program ´aveis que tem associados atributos, cujos valores podem ser fixados, e m ´etodos (func¸ ˜oes), que podem ser chamados para modificar o objeto.
Ü A anatomia b ´asica de um plot inclui quatro camadas:
m Figure:a camada mais de baixo. Pense nela como sendo uma janela que cont ´em os bot ˜oes de minimizar, maximizar e fechar m Plot: ´e criado sobre a camada da figure. Se existir mais de um
plot na mesma figure, cada um ´e chamado de subplot m Axis:s ˜ao os eixos x e y , onde as linhas, pontos, histogramas,
etc, s ˜ao desenhados sobre a camada plot. Um axis tem atributos como axis labels, tick labels, espessura da linha
m Data:pontos, linhas, formas que s ˜ao plotados sobre a camada axis
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Interface orientada a objeto
Ü A func¸ ˜ao plt.subplots() cria ao mesmo tempo o objeto figure e o objeto axis. Quando usada sem argumentos, cria apenas uma
figuree apenas um axis
Ü por convenc¸ ˜ao, chama-se o objeto figure de fig e o objeto axis de ax:
fig, ax = plt.subplots()
Ü Uma vez criados os objetos, podemos adicionar seus atributos , usando a estrutura de linguagem orientada a objeto:
< objeto > . < atributo >, p. ex: ax.plot(x, y)
ax.plot(x, z)
onde x, y e z s ˜ao numpy.arrays
Ü O objeto ax, tem v ´arios m ´etodos e atributos, p. ex. : ax.set title(), ax.legend().
Ele tem tamb ´em objetos filhas , com seus pr ´oprios atributos:
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
plotSin-oo.py
import numpy as np import matplotlib.pyplot as plt x = np.arange(0,4*np.pi,0.1) y = np.sin(x) z = np.cos(x) fig, ax = plt.subplots() ax.plot(x,y,linewidth=2.0, linestyle=’--’) ax.plot(x,z)ax.set_title(’Duas func¸˜oes’) ax.legend([’sin’,’cos’])
ax.xaxis.set_label_text("angulo")
ax.yaxis.set_label_text(’Seno e Cosseno’) plt.show()
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
M ´etodos e atributos de axis
tabela retirada desse link
Comando Orientado a objeto Descric¸ ˜ao correspondente plt. fig, ax = plt.subplots() Cria o objeto figure e eixo –
ax.plot(x,y) cria gr ´afico de linha plt.plot(x,y) ax.set title(’Meu T´ıtulo’) t´ıtulo do gr ´afico plt.title(’My Title’) ax.set xlabel(’x label’) legenda do eixo x plt.xlabel(’x label’) ax.set ylabel(’y label’) legenda do eixo y plt.ylabel(’x label’) ax.legend([’line1’,’line2’]) legenda do gr ´afico plt.legend([’line1’,’line2’]) ax.set xlim([0, 5]) limites do eixo x plt.xlim([0, 5]) ax.set ylim([-1, 1]) limites do eixo y plt.ylim([-1, 1]) ax.axis([-x, +x, -y, +y]) limites dos 2 eixos
-ax.grid(True) grid nas duas direc¸ ˜oes plt.grid(True) ax.xaxis.grid(True) grid na vertical -ax.yaxis.grid(True) grid na horizontal
-ax.xaxis.set xticks([loc]) localizac¸ ˜ao dos ticks em x plt.xticks([loc],[label]) ax.xaxis.set xticklabels([labels]) tick labels x plt.xticks([loc],[label]) ax.yaxis.set yticks([loc]) localizac¸ ˜ao dos ticks em y plt.yticks([loc],[label]) ax.yaxis.set yticklabels([labels]) tick labels y plt.yticks([loc],[label]) ax.xaxis.set ticks([]) remove x tick labels plt.xticks([],[]) ax.yaxis.set ticks[]) remove y tick labels plt.yticks([],[]) ax.set aspect(’equal’) iguala as escalas dos eixos
-fig.tight layout() ajusta padding plt.tight layout() plt.show() mostra o gr ´afico plt.show()
Al ´em do ax.plot(x,y) temos todos os outros tipos de gr ´aficos:
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Interface orientada a objeto
Ü
Essa forma de fazer gr ´aficos no matplotlib ´e a mais utilizada nos
exemplos
Ü
Ela oferece muitas possibilidades que n ˜ao s ˜ao poss´ıveis (ou que
n ˜ao ´e t ˜ao simples) utilizando o modo plt.:
m
apresentar mais de um gr ´afico na mesma figura
m
apresentar mais de um tipo de gr ´afico no mesmo plot
(p. ex. histograma e uma func¸ ˜ao superposta)
m
posicionar o eixo x no zero do eixo y
m
mostrar o gr ´afico em escala log
m
animac¸ ˜ao
m
...
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Mais de um gr ´afico na mesma figura - 1
Ü Para termos mais de um gr ´afico em uma figura colocamos o n ´umero de linhas e colunas como argumento da func¸ ˜ao subplots(), e atribu´ımos cada um a um objeto do tipo axis
Ü A sintaxe geral ´e:
fig, <ax objects> = plt.subplots(rows, cols)
Ü e um exemplo de uma figura com dois 6 gr ´aficos, apresentados em 2 linhas e 3 colunas:
fig, ( (ax1,ax2,a3), (ax4,ax5,ax6) ) = plt.subplots(2, 3) Ü Uma atributo bastante utilizado da classe axis s ˜ao as escalas
logar´ıtmicas dos gr ´aficos:
ax.plot() linear em x e em y
ax.semilogy() linear em x, logar´ıtmica em y ax.semilogx() logar´ıtmica em x, linear em y ax.loglog() logar´ıtmica em x e em y
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
maisDeUmPlot-1.py
t = np.arange(0.01, 20.0, 0.01)
# Cria a figure com 2 linhas e 2 colunas de subplots fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
ax1.plot(t, np.exp(-t / 5.0)) # linear x e y
ax1.set_title(’linear x and y’) ax1.grid()
ax2.semilogy(t, np.exp(-t / 5.0)) # log eixo y
ax2.set_title(’semilogy’) ax2.grid()
ax3.semilogx(t, np.exp(-t / 5.0)) # log eixo x
ax3.set_title(’semilogx’) ax3.grid()
ax4.loglog(t, 20 * np.exp(-t / 5.0), basex=2) # log eixo x e y ax4.set_title(’loglog base 2 on x’)
ax4.grid()
fig.tight_layout() plt.show()
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
maisDeUmPlot-1.py
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
Mais de um gr ´afico na mesma figura - 2
Ü Existe uma outra forma de fazer subplots: m primeiramente cria-se apenas uma figura
plt.figure()
m depois adiciona-se cada plot individualmente: ax1 = plt.subplot(1, 3, 1)
a ordem dos argumentos ´e:
n ´umero de linhas, n ´umero de colunas, ´ındice desse gr ´afico (que comec¸a com 1)
repare que o m ´etodo ´e subplot (sem “s” no final)
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)
maisDeUmPlot-2.py
# Cria apenas a figure , podendo definir seu tamanho plt.figure(figsize=(9, 3)) # largura e altura em inches
t = np.arange(0.01, 20.0, 0.01) ax1 = plt.subplot(1, 3, 1) ax1.plot(t, np.exp(-t / 5.0)) ax1.set_title(’exp(-t / 5.0)’) t = np.arange(0,4*np.pi,0.1) ax2 = plt.subplot(1, 3, 2) ax2.plot(t, np.sin(t)) ax2.set_title(’seno (x) ’) ax3 = plt.subplot(1, 3, 3) ax3.plot(t, np.sin(t)) ax3.spines[’bottom’].set_position(’zero’) ax3.spines[’right’].set_color(’none’) ax3.spines[’top’].set_color(’none’) plt.show()
Gr ´aficos S. Taylor Histogramas Array-Matrizes Algebra Linear´ interface OO (Opcional)