2011-01-30 6 views
8

텍스트 파일에 일부 데이터를 수집하고 박스 플롯을 생성하려고합니다. 그러나이 데이터 파일에는 가변 길이의 행이 들어 있습니다.matplotlib의 가변 길이 데이터 박스 플롯

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

아니요, 데이터 파일 열에 boxplots을 사용하고 싶습니다. 그래서 동등한 길이의 경우에 m 행 n 배열이 될 것입니다. 그리고 boxplot은 조바꿈됩니다. – Kabbo

+0

문서에서 "x는 배열 또는 벡터 시퀀스입니다." 따라서 데이터를 읽고 상자 당 하나의 벡터로 변환해야합니다. 파이썬의 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

당신이 당신의 데이터를 읽는 방법을 요구하는 경우, 당신이 원하는 것을 할 수있는 많은 방법이있다. 또한 파이썬 API하거나 GUI를 사용하여, Plot.ly의 상자 그림을 할 수

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

: 간단한 예를 들어.

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'] 

전체 공개 : 나는 당신이 브라우저 또는이 같은 Python API와 함께 할 수있는 this graph을 만든 내가 Plotly 팀입니다.

enter image description here

+0

와우, 아름다운! –