Вы находитесь на странице: 1из 14

26/10/12

Pgina de Evy Salcedo

FsicaComputacionalFSC5705
Smula Aulas Lista Conc. Freq. Outros Ensino

MatPlotLib
Ao ler este documento provavelmente voc j escutou falar de gnuplot e de xmgrace e deve se perguntar, outro???, sim, outro de entre muitos. decidi escrever sobre esta biblioteca porque a diferencia do xmgrace (que o que eu uso) d para instalar no windows de uma forma relativamente fcil; comparado ao gnuplot ele menos rido no que diz respeita a colocar formulas dentro do grfico; finalmente ele uma faz parte do python, uma plataforma que est em franco crescimento. Se voc usuario windows instalei o pythonxy esse pacote j traz tudo o que voc precisa em python como um estudante de Fsica, se voc se sente bem pagando pois acha que ter a segurana de alguma empresa, de uma olhada em enthought. Se voc usurio mac, o python est no mac e agor s instalar o matplotlib. Finalmente se voc usurio Linux a vida fica mais o menos fcil, usurios de ubuntu (e derivados):
[ u s u a r i o @ p y t h o n : ] # s u d o a p t g e t i n s t a l l p y t h o n m a t p l o t l i b

Usurios Debian debem entrar como root e instalar:


[ r o o t @ p y t h o n : ] # a p t g e t i n s t a l l p y t h o n m a t p l o t l i b

Usurio de derivados do Red Hat (fedora, centos, scientific Linux, etc...)


[ r o o t @ p y t h o n : ] # y u m i n s t a l l p y t h o n m a t p l o t l i b

Outros Linux-like (BSD) procure no google por matplotlib + sua distribuio.

Grficos Simples
Trabalhar com o matplotlib lembra o gnuplot j que se cimentam numa linguagem de script, mas a diferena que o matplotlib o faz sobre o python, onde se comporta como um outro mdulo mais. Assim a leitura e tratamento de dados (ajustes polinomiais ou no lineares) feito com o Python e no fim mandar a imprimir com o matplotlib.

Exemplo simples: lendo e plotando os dados


Nosso primeiro exemplo consiste em plotar um conjunto de dados correspondente a uma parbola, baixe esse dados clicando aqui ou crie sua prpria tabela. Os script em python podem ser feitos como o kate (ou o bloco de notas do windows). O script abaixo deve estar na mesma pasta onde os dados esto colocados 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 # ! / u s r / b i n / e n v p y t h o n # M o d u l o s p y t h o n i m p o r t n u m p y a s n p i m p o r t s c i p y . i n t e r p o l a t e i m p o r t m a t p l o t l i b a s m p l i m p o r t m a t p l o t l i b . p y p l o t a s p l t # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # l e o s d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x , y = n p . l o a d t x t ( ' d a d o s 0 1 . d a t ' , u n p a c k = T r u e ) # p l o t a n d o o s d a d o s p l t . p l o t ( x , y , ' * ' ) p l t . s h o w ( )
?

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

1/14

26/10/12

Pgina de Evy Salcedo

Para executar no Linux voc digita python nome_do_script.py, note que tradicionalmente se coloca .py como extenso dos scripts python.
[ u s u a r i o @ p y t h o n : ] # p y t h o n s c r i p t 0 1 . p y

Figura 01: grfico simples de um conjunto de dados com matplotlib. O resultado desse rodar script o grfico mostrado na figura 01.

Tipo de simbolo
Observe que na linha 15 do script se manda a plotar os dados de representar os pontos, alm de existe outras opes:
No script
. o , v ^ < 1
x

contra

utilizando

para

No grfico
ponto circulo pixel Triangulo para baixo Triangulo para acima Triangulo para esquerda Trpode para baixo

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

2/14

26/10/12
2 3 4 s p * h H + x D | Trpode para cima Trpode para esquerda Trpode para direita quadrado pentgono estrela hexgono hexgono rotado mais cruz (x) diamante linha vertical linha horizontal

Pgina de Evy Salcedo

Tipo de linhas
Em lugar de utilizar pontos, podemos unir os dados utilizando linhas 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 # ! / u s r / b i n / e n v p y t h o n # M o d u l o s p y t h o n i m p o r t n u m p y a s n p i m p o r t s c i p y . i n t e r p o l a t e i m p o r t m a t p l o t l i b a s m p l i m p o r t m a t p l o t l i b . p y p l o t a s p l t # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # l e o s d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x , y = n p . l o a d t x t ( ' d a d o s 0 1 . d a t ' , u n p a c k = T r u e ) # p l o t a n d o o s d a d o s p l t . p l o t ( x , y , ' ' ) p l t . s h o w ( )
?

resulta no seguinte grfico

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

3/14

26/10/12

Pgina de Evy Salcedo

Figura 02: grfico simples de um conjunto de dados com matplotlib. Os tipos de linhas que o matplotlib suporta so
No script
-: -.

No grfico
linha slida linha tracejada linha pontilhada linha trao-ponto

Cor
Para mudar a cor das linhas (smbolos) colocamos entre aspas a cor que desejamos 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 # ! / u s r / b i n / e n v p y t h o n # M o d u l o s p y t h o n i m p o r t n u m p y a s n p i m p o r t s c i p y . i n t e r p o l a t e i m p o r t m a t p l o t l i b a s m p l i m p o r t m a t p l o t l i b . p y p l o t a s p l t # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # l e o s d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x , y = n p . l o a d t x t ( ' d a d o s 0 1 . d a t ' , u n p a c k = T r u e ) # p l o t a n d o o s d a d o s p l t . p l o t ( x , y , ' : ' , c o l o r = ' m ' , m a r k e r = " o " ) p l t . s h o w ( )
?

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

4/14

26/10/12

Pgina de Evy Salcedo

Figura 03: grfico simples mudando a cor dos pontos. As cores disponveis so:
No script
b ou blue c ou cian g ou green k ou black m ou magenta r ou red w ou white y ou yellow

No grfico
azul ciano verde preto magenta vermelho branco amarelo

Alm dessas cores podemos utilizar cores ao estilo das usada em HTML: #d3ddff.

Atributos
No exemplo anterior vimos que a cor da linha foi passada como um atributo, de fato, todos os parmetros que apresentamos at aqui so atributos do grficos que podem ser explicitamente nomeados. O atributos que o matplotlib aceita esto dados na tabela a seguir:
No script
color ou c

No grfico
cor

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

5/14

26/10/12
linestyle linewidth marker markeredgecolor markeredgewidth markerfacecolor markersize tipo de linha largura da linha tipo de smbolo

Pgina de Evy Salcedo

cor de borda do simbolo largura da borda do smbolo cor de recheio do smbolo tamanho de smbolo

Vamos agora a plotar simultaneamente dois conjuntos de dados, utilizaremos a informao da tabela previa para poder identificar cada um das curvas. Para voc testar ter que baixar o arquivo dados02.dat de aqui. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2
? # ! / u s r / b i n / e n v p y t h o n # M o d u l o s p y t h o n i m p o r t n u m p y a s n p i m p o r t s c i p y . i n t e r p o l a t e i m p o r t m a t p l o t l i b a s m p l i m p o r t m a t p l o t l i b . p y p l o t a s p l t # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # l e o s d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x , y = n p . l o a d t x t ( ' d a d o s 0 1 . d a t ' , u n p a c k = T r u e ) # l e o s I I d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x 1 , y 1 = n p . l o a d t x t ( ' d a d o s 0 2 . d a t ' , u n p a c k = T r u e ) # p l o t a n d o o s d a d o s p l t . p l o t ( x , y , l i n e s t y l e = ' ' , c o l o r = ' b l a c k ' , m a r k e r = " o " , m a r k e r s i z e = 2 0 , m a r k e r f a c e c o l o r p l t . p l o t ( x 1 , y 1 , l i n e s t y l e = ' . ' , c o l o r = ' r e d ' , m a r k e r = " o " , m a r k e r s i z e = 1 0 , m a r k e r e d g e c o l o r p l t . s h o w ( )

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

6/14

26/10/12

Pgina de Evy Salcedo

Figura 04: Dois grfico simples com definies de atributos.

Ttulos, eixos
Agora abordaremos o texto que se coloca no grfico. Na figura script embaixo se mostra como se coloca a legenda nos eixo, o ttulo, e a legenda do prprio grfico 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 # ! / u s r / b i n / e n v p y t h o n # * c o d i n g : u t f 8 * # M o d u l o s p y t h o n i m p o r t n u m p y a s n p i m p o r t s c i p y . i n t e r p o l a t e i m p o r t m a t p l o t l i b a s m p l i m p o r t m a t p l o t l i b . p y p l o t a s p l t # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # l e o s d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x , y = n p . l o a d t x t ( ' d a d o s 0 1 . d a t ' , u n p a c k = T r u e ) # l e o s I I d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x 1 , y 1 = n p . l o a d t x t ( ' d a d o s 0 2 . d a t ' , u n p a c k = T r u e ) # p l o t a n d o o s d a d o s p l t . p l o t ( x , y , l i n e s t y l e = ' ' , c o l o r = ' b l a c k ' , m a r k e r = " * " , l a b e l = u " p o s i o " ) p l t . p l o t ( x 1 , y 1 , l i n e s t y l e = ' . ' , c o l o r = ' r e d ' , m a r k e r = " o " , l a b e l = " v e l o c i d a d e " ) p l t . l e g e n d ( l o c = ' u p p e r l e f t ' ) p l t . g r i d ( T r u e ) p l t . x l a b e l ( ' t ( s ) ' ) p l t . y l a b e l ( r ' $ Y ( m ) $ e $ V _ y ( \ f r a c { m } { s } ) $ ' ) p l t . t i t l e ( " E x e m p l o " ) p l t . s h o w ( )
?

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

7/14

26/10/12

Pgina de Evy Salcedo

Figura 04: Legendas no matplotlib. Note que a legenda associada curva colocada via o atributo label. Para que ele aparea no grfico devemos colocar a linha 22 que nesse caso indica que a caixa com legenda dever aparecer no canto superior esquerdo, alm dessa posio temos:
No script
0 ou best 1 ou upper right 2 ou upper left 3 ou lower left 4 ou lower right 5 ou right

No grfico
melhor posio acima e direita acima e esquerda abaixo e esquerda abaixo e direita direita

6 ou center left 7 ou center right 8 ou lower center 9 ou upper center 10 ou center

centrado esquerda centrado direita centrado embaixo centrado acima centralizado

Note que a tabela diz que podemos utilizar nmeros ou letras (entre aspas) para indicar a posio (loc=10 igual a loc='center'). De fato alm de nmeros podemos utilizar uma tupla de dados (coordenadas) onde por exemplo (0,0) o canto inferior esquerdo e (0.5,0.5) o centro,

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

8/14

26/10/12

Pgina de Evy Salcedo

assim um exemplo de posicionamento seria loc=(0.05,0.8) quase equivalente loc='upper left'. Quando usamos portugus colocamos um u a frente da palavra como feito no label da linha 18 (label=u'posio'), para que isso funcione direito devemos salvar nosso script em UTF-8 e colocar no cabealho # -*- coding: utf-8 -*-. Para a legenda dos eixos x e y se utiliza plt.xlabel('') e plt.ylabel(''), respetivamente. Se voc quer colocar uma equao ou letra grega, por exemplo no eixo x, devemos escrever entre $$ a equao (latex) iniciar com r a legenda, como feito na linha 29 (para maiores informaes de uma olhada em formulas com matplotlib)

Erro nos dados


Se temos dados resultantes de um experimento a eles est associado um erro resultante do processo de medio. Nesses casos no utilizamos a funo plt.plot para imprimir e sim plt.errorbar, vejamos um exemplo, baixe os dados necessrios para esse executar esse exemplo aqui 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8
? # ! / u s r / b i n / e n v p y t h o n # * c o d i n g : u t f 8 * # M o d u l o s p y t h o n i m p o r t n u m p y a s n p i m p o r t s c i p y . i n t e r p o l a t e i m p o r t m a t p l o t l i b a s m p l i m p o r t m a t p l o t l i b . p y p l o t a s p l t # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # l e o s d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x , y , e r r = n p . l o a d t x t ( ' d a d o s 0 4 . d a t ' , u n p a c k = T r u e ) # p l o t a n d o o s d a d o s p l t . e r r o r b a r ( x , y , y e r r = e r r , l i n e s t y l e = ' ' , c o l o r = ' b l a c k ' , m a r k e r = " * " , l a b e l = u " e x p e r i m e n t o " p l t . l e g e n d ( l o c = ' u p p e r l e f t ' ) p l t . g r i d ( T r u e ) p l t . x l a b e l ( u ' I n d i v d u o s ' ) p l t . y l a b e l ( u ' f r e q u n c i a ' ) p l t . t i t l e ( " G r a f i c o c o m e r r o e m y " ) p l t . s h o w ( )

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

9/14

26/10/12

Pgina de Evy Salcedo

Figura 05b: Erro nos dados. possvel associar um erro ao pontos nos eixo x (simultaneamente com y, dado um cruz no ponto), para isso utilizamos o parmetro xerr= vetor com dados do erro.

Ajustes polinomial simples


No caso de um ajuste polinomial utilizamos a funo polyfit: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 # ! / u s r / b i n / e n v p y t h o n # * c o d i n g : u t f 8 * # M o d u l o s p y t h o n i m p o r t n u m p y a s n p i m p o r t s c i p y . i n t e r p o l a t e i m p o r t m a t p l o t l i b a s m p l i m p o r t m a t p l o t l i b . p y p l o t a s p l t # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # l e o s d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x , y = n p . l o a d t x t ( ' d a d o s 0 1 . d a t ' , u n p a c k = T r u e ) # c a l c u l a o s c o e f i c i e n t e s d o p o l i n o m i o p r i n t ' c o e f i c i e n t e s d o p o l i n o m i o ' c o e f = n p . p o l y f i t ( x , y , 2 ) p r i n t c o e f # c r i a o p o l i n o m i o p r i n t ' \ n P o l i n o m i o a j u s t a d o ' p o l = n p . p o l y 1 d ( c o e f ) p r i n t p o l # c a l c u l a o s n o v o s y c o m o j u s t e y a j u s = p o l ( x ) # c r i a o g r a f i c o p l t . p l o t ( x , y , ' o ' ) p l t . p l o t ( x , y a j u s , ' ' ) p l t . l e g e n d ( [ ' d a d o s ' , ' a j u s t e ' ] , l o c = 2 ) p l t . g r i d ( T r u e )
?

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

10/14

26/10/12

Pgina de Evy Salcedo

3 3 3 4 3 5 3 6

p l t . x l a b e l ( ' t ' ) p l t . y l a b e l ( ' V ' ) p l t . t i t l e ( " E x e m p l o d e a j u s t e " ) p l t . s h o w ( )

[ u s u a r i o @ p y t h o n : ] # p y t h o n s c r i p t 0 6 . p y c o e f i c i e n t e s d o p o l i n o m i o [ 1 . 0 0 0 0 0 0 0 0 e + 0 0 3 . 9 2 3 5 2 4 4 4 e 1 5 1 . 3 3 0 7 0 5 8 4 e 1 4 ]

P o l i n o m i o a j u s t a d o 2 1 x 3 . 9 2 4 e 1 5 x + 1 . 3 3 1 e 1 4

Figura 06: Ajuste polinomial. A funo polyfit devolve os coeficientes do ajuste polinomial, se esse coeficientes so passados funo poly1d ela vai montar a equao correspondente, como se mostra nas linhas 22 e 23. Com o polinmio criado na linha 22 podemos calcular os novos valores (yajus) como se mostra na linha 26.

Ajuste no linear
Para realizar o ajuste no linear de dados utilizamos a o conjunto de dados aqui armazenados, a esses dados aplicamos o prximo script 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 # ! / u s r / b i n / e n v p y t h o n # * c o d i n g : u t f 8 * # M o d u l o s p y t h o n i m p o r t n u m p y a s n p i m p o r t s c i p y . o p t i m i z e i m p o r t m a t p l o t l i b a s m p l i m p o r t m a t p l o t l i b . p y p l o t a s p l t # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # F u n o q u e d e s e j a m o s a j u s t a r
?

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

11/14

26/10/12

Pgina de Evy Salcedo

1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2

d e f g a u s i a n a ( x , y o , x o , s ) : y = y o * n p . e x p ( ( x x o ) * * 2 / ( 2 . 0 * s * s ) ) r e t u r n y # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # l e o s d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x , y = n p . l o a d t x t ( ' d a d o s 0 3 . d a t ' , u n p a c k = T r u e ) c h u t e I n i c i a l = n p . a r r a y ( [ 7 . 0 , 1 5 . 0 , 3 . 0 ] ) r e s A j u s t e , m c o v = s c i p y . o p t i m i z e . c u r v e _ f i t ( g a u s i a n a , x , y , p 0 = c h u t e I n i c i a l ) p r i n t " R e s u l t a d o d o a j u s t e : " , r e s A j u s t e p r i n t u ' \ n M a t r i z d e c o v a r i a n a ( d i a g o n a l e h v a r i a n a d o s r e s u l t a d o s ) : ' p r i n t m c o v # g e r a o s y a j u s t a d o s y a j u s = g a u s i a n a ( x , r e s A j u s t e [ 0 ] , r e s A j u s t e [ 1 ] , r e s A j u s t e [ 2 ] ) # c r i a o g r a f i c o p l t . p l o t ( x , y , ' o ' ) p l t . p l o t ( x , y a j u s , ' ' ) p l t . l e g e n d ( [ ' d a d o s ' , ' a j u s t e ' ] , l o c = 2 ) p l t . g r i d ( T r u e ) p l t . x l a b e l ( ' x ' ) p l t . y l a b e l ( ' y ' ) p l t . t i t l e ( u ' E x e m p l o d e a j u s t e n o l i n e a r ' ) p l t . s h o w ( )

[ u s u a r i o @ p y t h o n : ] # p y t h o n s c r i p t 0 7 . p y R e s u l t a d o d o a j u s t e : [ 9 . 6 4 5 1 5 4 4 8 2 0 . 0 3 0 0 9 1 8 8 5 . 1 6 4 7 6 8 0 3 ]

M a t r i z d e c o v a r i a n a ( d i a g o n a l e h v a r i a n a d o s r e s u l t a d o s ) : [ [ 1 . 1 0 1 8 2 1 3 8 e 0 2 4 . 8 7 6 1 7 2 8 2 e 0 5 3 . 9 2 4 0 3 7 1 3 e 0 3 ] [ 4 . 8 7 6 1 7 2 8 2 e 0 5 4 . 2 1 6 8 3 1 6 6 e 0 3 1 . 9 9 8 7 2 2 3 2 e 0 6 ] [ 3 . 9 2 4 0 3 7 1 3 e 0 3 1 . 9 9 8 7 2 2 3 2 e 0 6 4 . 2 0 2 1 0 0 5 0 e 0 3 ] ]

Figura 07: Ajuste no linear.

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

12/14

26/10/12

Pgina de Evy Salcedo

Para o ajuste no linear utilizamos a funo scipy.optimize.curve_fit, essa funo espera o nome de outra funo a qual o modelo a ser ajustado ao dados, no programa chamada de gausiana e definida entre as linhas 13 e 15; seguidamente so passado a scipy.optimize.curve_fit os vetores de dados x e y; finalmente damos para ela um chute inicial dos parmetros que definem a funo a ser ajustada. Como resultado do ajuste ela devolve um vetor e uma matriz, o vetor armazena parmetros resultantes do ajuste na ordem que foram definidos na funo, a matriz devolve a matriz de covariana.

Ajuste no linear
Similar ao caso anterior, a diferena que agora a incerteza ser colocada como dado da funo scipy.optimize.curve_fit 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3
? # ! / u s r / b i n / e n v p y t h o n # * c o d i n g : u t f 8 * # M o d u l o s p y t h o n i m p o r t n u m p y a s n p i m p o r t s c i p y . o p t i m i z e i m p o r t m a t p l o t l i b a s m p l i m p o r t m a t p l o t l i b . p y p l o t a s p l t # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # F u n o q u e d e s e j a m o s a j u s t a r d e f g a u s i a n a ( x , y o , x o , s ) : y = y o * n p . e x p ( ( x x o ) * * 2 / ( 2 . 0 * s * s ) ) r e t u r n y # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # l e o s d a d o s e a r m a z e n a e m 2 v e t o r e s : x , y . x , y , y e r r = n p . l o a d t x t ( ' d a d o s 0 4 . d a t ' , u n p a c k = T r u e ) c h u t e I n i c i a l = n p . a r r a y ( [ 7 . 0 , 1 5 . 0 , 3 . 0 ] ) r e s A j u s t e , m c o v = s c i p y . o p t i m i z e . c u r v e _ f i t ( g a u s i a n a , x , y , p 0 = c h u t e I n i c i a l , s i g m a = y e r r ) p r i n t " R e s u l t a d o d o a j u s t e : " , r e s A j u s t e p r i n t u ' \ n M a t r i z d e c o v a r i a n a ( d i a g o n a l e h v a r i a n a d o s r e s u l t a d o s ) : ' p r i n t m c o v # g e r a o s y a j u s t a d o s x a j u s = n p . l i n s p a c e ( 0 . 0 , 4 0 . 0 , 1 0 0 ) # g e r a 1 0 0 p o n t o s d e s d e 0 a t 4 0 y a j u s = g a u s i a n a ( x a j u s , r e s A j u s t e [ 0 ] , r e s A j u s t e [ 1 ] , r e s A j u s t e [ 2 ] ) # c r i a o g r a f i c o p l t . e r r o r b a r ( x , y , y e r r , m a r k e r = ' o ' , l i n e s t y l e = ' ' ) p l t . p l o t ( x a j u s , y a j u s , ' ' ) p l t . l e g e n d ( [ ' d a d o s ' , ' a j u s t e ' ] , l o c = 2 ) p l t . g r i d ( T r u e ) p l t . x l a b e l ( ' x ' ) p l t . y l a b e l ( ' y ' ) p l t . t i t l e ( u ' E x e m p l o d e a j u s t e n o l i n e a r ' ) p l t . s h o w ( )

[ u s u a r i o @ p y t h o n : ] # p y t h o n s c r i p t 0 7 . p y R e s u l t a d o d o a j u s t e : [ 9 . 9 4 0 9 5 1 7 5 1 9 . 9 2 3 0 5 9 2 9 4 . 9 9 1 5 3 2 6 4 ]

M a t r i z d e c o v a r i a n a ( d i a g o n a l e h v a r i a n a d o s r e s u l t a d o s ) : [ [ 0 . 0 0 7 7 0 0 0 7 0 . 0 0 1 6 6 5 0 4 0 . 0 0 2 4 4 8 0 7 ] [ 0 . 0 0 1 6 6 5 0 4 0 . 0 0 7 5 0 7 5 4 0 . 0 0 1 0 7 8 5 7 ] [ 0 . 0 0 2 4 4 8 0 7 0 . 0 0 1 0 7 8 5 7 0 . 0 0 5 0 6 7 4 ] ]

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

13/14

26/10/12

Pgina de Evy Salcedo

Figura 07: Ajuste no linear com erro.

/media/ext4_evy/Ensino/UFSC/Ano2012/IIsemestre/public_html//matplot.html

14/14

Вам также может понравиться