Melhorar a visualização de u uma grande quantidade de pontos (NumPy, Matplotib)

126 views
Skip to first unread message

Renato de Macedo Giovanini

unread,
Jun 3, 2015, 1:23:37 PM6/3/15
to python...@googlegroups.com
Olá a todos. 
Desculpem se a questão é meio ridícula, não tenho quase nenhuma experiência em interface gráfica com o Python. 
Estou trabalhando num sistema de Datalogging de ECG (Aquisição de muitas horas de atividade elétrica do coração), uma espécie de Holter. Armazeno os dados amostrados em um arquivo .txt em um cartão SD. 
Utilizando o matplotlib, consegui plotar uma grande quantidade de dados (várias horas de monitoramento), mas todos os dados são "espremidos" na janela de tamanho padrão:

Gostaria de saber se é possível (imagino que sim, praticamente tudo é possível usando Python =]) expandir o tamanho dessa janela e também como adicionar barras horizontais que permitissem ao profissional de saúde varrer horizontalmente o sinal numa dimensão mais visível, como essa: 

Muito obrigado desde já!!  


Obs: Eis o script com o qual estou fazendo plotando o arquivo .txt:

# Tentando plotar os dados de um arquivo .txt

import matplotlib.pyplot as plt
import numpy as np


# Importando o arquivo para a variavel 'data', e fechando-o a seguir
data = open('ii.dat','r')
lines = data.readlines()
data.close()

#definindo as variaveis x e y como listas

x = []
y = []

#Correndo as linhas do arquivo, separando as duas colunas em variaveis
#diferentes e transformando strings em floats

for line in lines:
    p = line.split()
    x.append(float(p[0]))
    y.append(float(p[1]))

#Plotando as listas

plt.plot(x,y)
plt.xlabel('tempo[ms]')
plt.ylabel('Amplitude [mV]')
plt.title('ECG')


#mostrando a figura

plt.show()




Igor dos Santos Montagner

unread,
Jun 4, 2015, 9:28:25 AM6/4/15
to python...@googlegroups.com
Renato,

até onde sei o matplotlib não faz gráficos interativos. Porém uma biblioteca chamada bokeh[1] aparentemente faz e eles parecem interessantes. Eu pessoalmente nunca usei ela, mas os exemplos do site são interessantes. Ainda por cima, ele funciona no IPython Notebook, o que ajuda bastante nas análises de dados.


[1] http://bokeh.pydata.org/
Message has been deleted

Renato de Macedo Giovanini

unread,
Jun 5, 2015, 9:04:00 AM6/5/15
to python...@googlegroups.com
Olá Igor. 
Nunca tinha ouvido falar nessa biblioteca, vou dar uma pesquisada. Os exemplos do site são realmente interessantes. 
Muito obrigado pela informação. Abraço! 

Antonio Neto

unread,
Jun 5, 2015, 10:38:52 AM6/5/15
to python...@googlegroups.com
Renato,

poderia checar qual o backend [1] que está usando digitando os seguintes comandos no modo interativo:

$ python
>>> import matplotlib
>>> matplotlib.get_backend()
'TkAgg'


Normalmente o matplotlib já vem configurado para um backend com uma interface com alguns controles de navegação [2].

[1] matplotlib.org/faq/usage_faq.html#what-is-a-backend
[2] matplotlib.org/1.4.0/users/navigation_toolbar.html

Bruno Godoi Eilliar

unread,
Jun 5, 2015, 10:39:05 AM6/5/15
to python...@googlegroups.com
Olá Renato, trabalho com biopotenciais (EEG) e Python.
Pelo que entendi da sua figura o primeiro plot está utilizando todo o vetor de dados que possui (de 0 a 70 ms).
Se o que você quer mesmo é focar em uma determinada região do seu sinal, como sugere a figura 2 (de 0 a 26 ms), um comando bacana é o :

plt.axis((x1,x2,y1,y2))

Sendo:
x1 -> limite inferior no eixo x (na figura 2 seria 0 ms);
x2 -> limite superior no eixo x (na figura 2 seria 26 ms);
y1 -> limite inferior do eixo y;
y2 -> limite superior do eixo y;

Uma dica, utilizando subplot() você ainda pode fazer assim: 
- em uma figura você plota o sinal completo e apertado;
- em outra figura você divide o sinal em diversas partes e plota elas em diversas subseções da figura (um plot de 0 a 25ms, outro de 26 a 50 ms, etc.)

Espero que ajude 

;)

Best Regards

Bruno G. Eilliar
Control and Automation Engineer

Arnaldo Russo

unread,
Jun 5, 2015, 10:50:50 AM6/5/15
to python-brasil
Olá Renato.

Sim é possível fazer isso que você quer e inclusive implementar isso com as ferramentas do IPython. Onde há hormas de fazer esse shrink e expansion [1]

Quanto ao tamanho da janela, basta você delimitar o tamanho da figura

fig = plt.figure(figsize=(8.7, 3.54)) # medidas em polegadas, nesse caso
ax = fig.add_subplot(111)
ax.plot(x,y)
ax.grid(axis='y')

Isso fará um grid line no seu eixo Y


O Matplotlib é bastante rico e versátil... você pode até fazer animações, e pausar no momento que quiser.
Boa sorte.



--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Antonio Neto

unread,
Jun 5, 2015, 6:47:28 PM6/5/15
to python...@googlegroups.com
Olá Renato,

Geralmente o Matplotlib quando usado com pyplot gera figuras já com algumas ferramentas de navegação [1]. Executando seu código aqui no meu ambiente funcionou tranquilo. Talvez seja o caso de verificar seu backend ai [2].

[1] matplotlib.org/1.4.0/users/navigation_toolbar.html
[2] matplotlib.org/faq/usage_faq.html#what-is-a-backend

Antonio Neto

unread,
Jun 5, 2015, 7:10:15 PM6/5/15
to python...@googlegroups.com
Opa, só agora vi que foram duas respostas. Como voltei para lista esses dias provavelmente minha primeira resposta estava parada esperando aprovação mas as duas falam da mesma dica :D
Reply all
Reply to author
Forward
0 new messages