Pergunta

Desejo fazer um histograma no matplotlib a partir de um arquivo de entrada que contém os dados brutos (.txt). Estou enfrentando problemas ao me referir ao arquivo de entrada. Eu acho que deveria ser um programa bastante pequeno. Algum gurus de matplotlib, alguma ajuda?

Não estou pedindo o código, algumas entradas devem me colocar da maneira certa!

Foi útil?

Solução

Eu recomendaria usar 'loadtxt'O que está na biblioteca Numpy. Existem funções relacionadas no matplotlib (csv2rec), mas o matplotlib está realmente padronizando no loadtxt.

Veja como funciona:

from matplotlib import pyplot as PLT

with open('name_of_your_file.csv') as f:
  v = NP.loadtxt(f, delimiter=",", dtype='float', comments="#", skiprows=1, usecols=None)

'V', o objeto retornado de 'loadtxt', é uma matriz NXM Numpy.

'loadtxt' aceita um arquivo ou um descritor de arquivo. A instância acima tem a maior parte da assinatura do método. 'Skiprows' é um número inteiro que especifica o número de linhas que contam do topo que você deseja pular; É comum configurá -lo como "1" para pular a linha do cabeçalho; 'USECOLS' começa em '0' e é uma lista recitando as colunas que você deseja incluir ('nenhum' é o padrão e os meios 'incluem tudo'). Os outros parâmetros funcionam como esperado.

Para plotar um histograma desses dados:

from matplotlib import pyplot as PLT

v_hist = NP.ravel(v)   # 'flatten' v
fig = PLT.figure()
ax1 = fig.add_subplot(111)

n, bins, patches = ax1.hist(v_hist, bins=50, normed=1, facecolor='green')
PLT.show()

Outras dicas

Você não pode dizer diretamente ao Matplotlib para fazer um histograma a partir de um arquivo de entrada - você precisará abrir o arquivo e obter os dados dele. Como você faria isso depende do formato do arquivo - se for apenas um arquivo com um número de cada linha, você pode simplesmente passar por cada linha, strip() espaços e novas linhas, e uso float() para convertê -lo em um número.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top