2011-01-30 8 views
8

私はテキストファイルにいくつかのデータを収集し、ボックスプロットを作成したいと思います。 しかし、このデータファイルには可変長の行が含まれています。matplotlibの可変長データ付きBoxplot

1.2、2.3、3.0、4.5
1.1、2.2、2.9

同じ長さのために、私はちょうど
PW = numpy.loadtxt( "./ learning.dat")
matplotlib.boxplotを行うことができます(PW.T)。

可変長データ線はどのように処理しますか?

+0

どのようにデータを解釈する必要がありますか?すべての値を単一の1D配列で連結する必要がありますか? –

+0

いいえ、私はデータファイルの列のボックスプロットをしたいと思います。だから私は等しい長さの場合には、m倍nの配列、ボックスプラス、転置、右でしょうか? – Kabbo

+0

docsは "xは配列かベクトルのシーケンスです"と言っています。したがって、あなたのデータを読み込んで、それを一連のベクトルに変換する必要があります。 Pythonのcsvモジュールを使って読むことができるようです。 –

答えて

16

配列またはリストのリストを使用するだけです。 boxplotはどんな種類のシーケンスをとるでしょう(とにかく、__len__を持つものは、とにかくジェネレータなどでは機能しません)。

例えば:

import matplotlib.pyplot as plt 
x = [[1.2, 2.3, 3.0, 4.5], 
    [1.1, 2.2, 2.9]] 
plt.boxplot(x) 
plt.show() 

enter image description here

あなたのデータを読み込む方法を求めている場合は、あなたがやりたいする方法はたくさんあります。簡単な例として:

import matplotlib.pyplot as plt 
import numpy as np 

def arrays_from_file(filename): 
    """Builds a list of variable length arrays from a comma-delimited text file""" 
    output = [] 
    with open(filename, 'r') as infile: 
     for line in infile: 
      line = np.array(line.strip().split(','), dtype=np.float) 
      output.append(line) 
    return output 

plt.boxplot(arrays_from_file('test.txt')) 
plt.show() 
2

また、PythonのAPIまたは単にGUIを使用して、Plot.lyで箱ひげ図を行うことができます。

box1 = {'y': [1.2, 2.3, 3.0, 4.5], 
'type': 'box'} 
box2 = {'y': [1.1, 2.2, 2.9], 
'type': 'box'} 
response = py.plot([box1, box2]) 
url = response['url'] 
filename = response['filename'] 

全開示:私はPlotlyチームの午前私はあなたがブラウザやこのようなPython APIを行うことができますthis graphを作りました。

enter image description here

+0

うわー、美しい! –

関連する問題